九、序列化器
9.1序列化
从数据库取QuerySet或数据对象转换成JSON
9.1.1序列化器的简易使用
#新建一张部门表
class Depart(models.Model):
title=models.CharField(verbose_name='部门',max_length=32)
order=models.IntegerField(verbose_name='顺序')
count=models.IntegerField(verbose_name='人数')
#新建路由
urlpatterns = [
path('api/<str:version>/depart/',views.DepartView.as_view(),name='depart'),
]
#创建一个序列化器
from rest_framework import serializers
class DepartSerializers(serializers.Serializer):
#部门系列化器,字段需要和数据库中的字段相对应
title=serializers.CharField()
order=serializers.IntegerField()
count=serializers.IntegerField()
#创建视图类
class DepartView(APIView):
#无需认证
authentication_classes = []
#部门视图类
def get(self,request,*args,**kwargs):
#1、获取数据库中的数据
depart_obj=models.Depart.objects.all().first()
#2、序列化器转换成JSON
ser_obj=DepartSerializers(instance=depart_obj)
#打印ser_obj.data类型
print('ser_obj.data.type:',type(ser_obj.data))
#3、返回给用户
context={
'status':True,
'data':ser_obj.data
}
return Response(context)
使用postman发送get请求进行测试
打印输出ser_obj.data的类型,是一个字典
ser_obj.data.type: <class 'rest_framework.utils.serializer_helpers.ReturnDict'>
9.1.2序列化QuerySet列表(多个数据对象)
#视图类
class DepartView(APIView):
#无需认证
authentication_classes = []
#部门视图类
def get(self,request,*args,**kwargs):
#1、获取数据库中的数据
#获取表中的所有记录(多个数据对象,是一个QuerySet列表)
depart_objs=models.Depart.objects.all()
#2、序列化器转换成JSON,many代表允许多个数据对象
ser_obj=DepartSerializers(instance=depart_objs,many=True)
print('ser_obj.data.type:',type(ser_obj.data))
#3、返回给用户
context={
'status':True,
'data':ser_obj.data
}
return Response(context)
使用postman发送GET请求进行测试
打印输出ser_obj.data的类型,是一个列表
ser_obj.data.type: <class 'rest_framework.utils.serializer_helpers.ReturnList'>
9.1.3ModelSerializer
#创建序列化器
from rest_framework import serializers
class DepartSerializers(serializers.ModelSerializer):
#部门系列化器
class Meta:
model = models.Depart
#获取数据库中的所有字段
fields = "__all__"
#指定字段
# fields = ['title','order','count']
#排除字段
# exclude=['count']
这个效果同9.2.2中的效果
9.1.4特殊字段的处理
#表结构
class Depart(models.Model):
#部门表
title=models.CharField(verbose_name='部门',max_length=32)
order=models