ModelSerializer point of use _ serialization and de-serialization knowledge usage difference

1, ModelSerializer follows

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:
= GlobalHost.objects.get global_host_obj (ID = globalHost)
the except of ObjectDoesNotExist:
The raise serializers.ValidationError ( "NOT_FOUND")
the else:
The raise serializers.ValidationError ( "PARAM_IS_NULL")

return globalHost

2, the following sequence of usage, new data
. Data = JSONParser () the parse (Request) 
serialze = RelatedbSerializer (Data = Data) # serialized data into the json ModelSerializer  
IF serialze.is_valid ():
global_host_obj = GlobalHost.objects.get (Data ID = [ "globalHost" ])
serialze.save (globalHost = global_host_obj)
return jsonResponse (code = Status.SUCCESS.get_code (), MSG = Status.SUCCESS.get_msg (), data = serialze.data)


. 3, the following usage deserialization, query data
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 target
total = paginator.num_pages # Pages
the try:
OBM = paginator.page (Page)
the except PageNotAnInteger:
OBM paginator.page = (. 1)
the except EmptyPage:
OBM = paginator.page (paginator.num_pages)
Serializer = RelatedbSerializer (OBM, MANY = True) # deserialization, the queries to the model objects passed ModelSerializer  
    return JsonResponse(data={"data": serializer.data,
"page": page,
"total": total
}, code="999999", msg="成功")


 
4, a single object to deserialize and serialize the object list distinction
3 is serialized, serialization of a plurality of single objects as follows
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="成功!")
 

Guess you like

Origin www.cnblogs.com/yoyo008/p/11593491.html