• ModelSerializer 使用知识点_序列化和反序列化用法区别


    1、ModelSerializer  如下

    from api_test.errorCode.errorCode import Status
    class RelatedbSerializer(serializers.ModelSerializer):
    """
    关联数据库返回JSON参数序列化
    """
    globalHost = serializers.CharField()

    class Meta:
    model = HostRelateDB
    fields = ('id', 'globalHost', 'relateDB_name', 'db_host', 'db_username', 'db_pwd', 'db_port')

    def validate_globalHost(self, globalHost):
    if globalHost:
    globalHost = int(globalHost) if globalHost.isdigit() else globalHost
    if not isinstance(globalHost, int):
    raise serializers.ValidationError("PARAM_NOT_INT")
    try:
    global_host_obj = GlobalHost.objects.get(id=globalHost)
    except ObjectDoesNotExist:
    raise serializers.ValidationError("NOT_FOUND")
    else:
    raise serializers.ValidationError("PARAM_IS_NULL")

    return globalHost

    2、序列化用法如下,新增数据
    data = JSONParser().parse(request)
    serialze = RelatedbSerializer(data=data) #序列化,将json数据传入ModelSerializer  
    if serialze.is_valid():
    global_host_obj = GlobalHost.objects.get(id=data["globalHost"])
    serialze.save(globalHost=global_host_obj)
    return JsonResponse(code=Status.SUCCESS.get_code(), msg=Status.SUCCESS.get_msg(),data=serialze.data)


    3、反序列化用法如下,查询数据
    globalHost_id = request.GET.get("globalHost")
    try:
    page_size = int(request.GET.get("page_size", 20))
    page = int(request.GET.get("page", 1))
    except (TypeError, ValueError):
    return JsonResponse(code="999985", msg="page and page_size must be integer!")
    if not globalHost_id.isdecimal():
    return JsonResponse(code="999996", msg="参数有误!")
    try:
    GlobalHost.objects.get(id=globalHost_id)
    except ObjectDoesNotExist:
    return JsonResponse(code="999995", msg="相关host不存在!")
    try:
    relateDBObj = HostRelateDB.objects.filter(globalHost_id=globalHost_id)
    paginator = Paginator(relateDBObj, page_size) # paginator对象
    total = paginator.num_pages # 总页数
    try:
    obm = paginator.page(page)
    except PageNotAnInteger:
    obm = paginator.page(1)
    except EmptyPage:
    obm = paginator.page(paginator.num_pages)
    serializer = RelatedbSerializer(obm, many=True) # 反序列化,将查询到的model对象传入ModelSerializer  
        return JsonResponse(data={"data": serializer.data,
    "page": page,
    "total": total
    }, code="999999", msg="成功")


     
    4、反序列化对单个对象和列表对象序列化的区别
    3中是对多个对象的序列化,单个序列化如下
    try:
    obj = AutomationTestTaskSerializer(AutomationTestTask.objects.get(project=project_id)) # 使用get方法取单个对象
    print("obj:",obj)
    return JsonResponse(code="999999", msg="成功!", data=obj.data)
    except ObjectDoesNotExist:
    print("ObjectDoesNotExist:")
    return JsonResponse(code="999999", msg="成功!")
     
  • 相关阅读:
    Tornado输出和响应头
    sqlalchemy 学习(二)scoped session
    04:sqlalchemy操作数据库 不错
    sqlalchemy(二)高级用法
    红黑树
    Minimum Window Substring
    Max Points on a Line
    分治算法
    Maximum Subarray
    Word Break
  • 原文地址:https://www.cnblogs.com/yoyo008/p/11593491.html
Copyright © 2020-2023  润新知