标签:序列化 cts none 序列 有序字典 分享图片 family ali 定义
第三章 restframework——序列化组件
一、django自带的序列化组件serializers
二、restframework的序列化组件Serializer
三、restframework的序列化组件ModelSerializer
四、restframework的序列化组件请求数据校验和保存功能(钩子)
五、restframework的序列化组件源码分析
一、django自带的序列化组件serializers
from django.core import serializers
def persons(request):
ret = models.Person.objects.all()
# person_list = []
# for i in ret:
# person_list.append({"name":i.name,"age":i.age})
# print(person_list)
# import json
# s = json.dumps(person_list)
# print(s)
from django.core import serializers
s = serializers.serialize("json",ret)
print(s)
return HttpResponse(s)
二、restframework的序列化组件Serializer
先来看看django自带的cbv的json写法,然后我们再来看下restframework的写法
【django】
class PublishView(View):
def get(self,request):
# 方式一
publish_list = list(Publish.objects.all().values(‘name‘,‘email‘))
return HttpResponse(json.dumps(publish_list))
# 方式二
from django.forms.models import model_to_dict
publish_list = Publish.objects.all()
temp = []
for obj in publish_list:
temp.append(model_to_dict(obj))
return HttpResponse(json.dumps(temp))
# 方式三
from django.core import serializers
publish_list = Publish.objects.all()
temp = serializers.serialize("json",publish_list)
return HttpResponse(temp)
【restframework】
from rest_framework import serializers
from rest_framework.response import Response
# 为queryset做序列化
class PublishSerializers(serializers.Serializer):
# 下面写的字段取决于你需要哪些字段做序列化
name = serializers.CharField()
email = serializers.CharField()
# publish=serializers.CharField(source="publish.name")
# authors=serializers.CharField(source="authors.all")
class PublishView(View): def get(self,request):
publish_list = Publish.objects.all()
pb = PublishSerializers(publish_list, many=True)
# many = true 代表前面传入的参数是queryset对象
# pb.data是把上面PublishSerializers内写的字段转为有序字典
# pb = PublishSerializers(model_obj,many = false)
# many = false 代表前面传入的参数是model对象 # 默认many = false,所以如果是model对象可以不用写many
# pb.data是直接把对象所有属性转为有序字典
return Response(pb.data)
注意:
source 如果是字段,会显示字段,如果是方法,会执行方法,不用加括号(authors=serializers.CharField(source=‘authors.all‘))
如在模型中定义一个方法,直接可以在在source指定执行
准备工作
models.py
from django.db import models # Create your models here. class Book(models.Model): title=models.CharField(max_length=32) price=models.IntegerField() pub_date=models.DateField() publish=models.ForeignKey("Publish") authors=models.ManyToManyField("Author") def __str__(self): return self.title class Publish(models.Model): name=models.CharField(max_length=32) email=models.EmailField() def __str__(self): return self.name class Author(models.Model): name=models.CharField(max_length=32) age=models.IntegerField() def __str__(self): return self.name
三、restframework的序列化组件ModelSerializer
四、restframework的序列化组件请求数据校验和保存功能(钩子)
五、restframework的序列化组件源码分析
标签:序列化 cts none 序列 有序字典 分享图片 family ali 定义
原文地址:https://www.cnblogs.com/neymargoal/p/9777322.html