序列化器:将复杂数据 (如查询集和模型实例) 转换为可以轻松渲染成json等格式
示例:项目信息获取
如下为常规处理方法
def get(self, request):
# a.获取所有项目数据(查询集),获取列表数据
queryset = Projects.objects.all()
b.将项目的查询集数据转化为嵌套字典的列表
project_list = []
for item in queryset:
item: Projects
project_list.append({
'id': item.id,
'name': item.name,
'leader': item.leader
})
#将列表嵌套字典转化成json格式返回前端
return JsonResponse(project_list, safe=False)
用序列化器实现,如下:
from .serializers import ProjectSerilizer
#从serializers文件导入之前定义的序列化器类,序列化器类实现可见其他文章
def get(self, request):
# a.获取所有项目数据(查询集),获取列表数据
queryset = Projects.objects.all()
# 三、序列化器的使用
# 1.可以使用序列化器进行序列化输出操作
# a.创建序列化器对象
# b.可以将模型对象或者查询集对象、普通对象、嵌套普通对象的列表,以instance关键字来传递参数
# c.如果传递的是查询集对象、嵌套普通对象的列表(多条数据),必须得设置many=True
# d.如果传递的是模型对象、普通对象,不需要设置many=True
# e.可以使用序列化器对象的.data属性,获取序列化器之后的数据(字典、嵌套字典的列表)
serializer = ProjectSerilizer(instance=queryset, many=True)
return JsonResponse(serializer.data, safe=False)
返序列化器:将json等数据转成复杂数据 (如查询集和模型实例)
示例:创建项目,接受前端传值
如下为常规处理方法:
def post(self, request):
# 1、获取json参数并转化为python中的数据类型(字典)
try:
python_data = json.loads(request.body)
except Exception as e:
return JsonResponse({'msg': '参数有误'}, status=400)
#将数据插入数据库
project_obj = Projects.objects.create(**python_data)
# 4、将创建成功的数据返回给前端
python_dict = {
'id': project_obj.id,
'name': project_obj.name,
'msg': '创建成功'
}
return JsonResponse(python_dict, status=201)
下面用反序列化器实现
from .serializers import ProjectSerilizer
#从serializers文件导入之前定义的序列化器类,序列化器类实现可见其他文章在这里插入代码片
# 1、获取json参数并转化为python中的数据类型(字典)
try:
python_data = json.loads(request.body)
except Exception as e:
return JsonResponse({'msg': '参数有误'}, status=400)
# 四、反序列化操作
# 1.定义序列化器类,使用data关键字参数传递字典参数
# 2.可以使用序列化器对象调用.is_valid()方法,才会开始对前端输入的参数进行校验
# 3.如果校验通过.is_valid()方法返回True,否则返回False
# 4.如果调用.is_valid()方法,添加raise_exeception=True,校验不通过会抛出异常,否则不会抛出异常
# 5.只有在调用.is_valid()方法之后,才可以使用序列化器对象调用.errors属性,来获取错误提示信息(字典类型)
# 6.只有在调用.is_valid()方法之后,才可以使用序列化器对象调用.validated_data属性,来获取校验通过之后的数据,
# 与使用json.load转化之后的数据有区别
serializer11 = ProjectSerilizer(data=python_data)
if not serializer11.is_valid():
return JsonResponse(serializer11.errors, status=400)
# 4、将创建成功的数据返回给前端,利用序列化器
serializer = ProjectSerilizer(instance=project_obj)
return JsonResponse(serializer.data, status=201)



