反序列化,反序列化是指从前端接收的json数据,转成数据对象的过程,更新操作、保存操作有反序列化操作,接收前端->验证数据->保存或更新为新的数据对象
序列化将获取到的数据对象转化为json数据。
如果使用上一篇的写法,反序列化和序列化都要自己进行写代码,为了提高效率,使用Django Rest Framework,把反序列化和序列化代码进行了封装,定义一个序列化器Serializer,可以帮助自动实现反序列化和序列化
Django REST framework借助 Django框架来进行封装的序列化器
先安装DjangoRESTframework的模块,可以使用命令
1、pip install djangorestframework ,可以使用pycharm的Python Interpreter进行安装
2、使用的时候,把它当做一个新的应用,注意不是新的项目,可以直接在setting.py中进行注册
'rest_framework',
3、使用的时候直接导入
from rest_framework.generics import ListAPIView, CreateAPIView, UpdateAPIView, RetrieveAPIView, DestroyAPIView
使用的时候直接继承这个类
例如
class BookCView(CreateAPIView)
点进去看CreateAPIView这个类源码,发现里面已经有post请求,
class CreateAPIView(mixins.CreateModelMixin,
GenericAPIView):
"""
Concrete view for creating a model instance.
"""
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
再继续点进去看create方法
class CreateModelMixin:
"""
Create a model instance.
"""
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
def perform_create(self, serializer):
serializer.save()
def get_success_headers(self, data):
try:
return {'Location': str(data[api_settings.URL_FIELD_NAME])}
except (TypeError, KeyError):
return {}
从源码上看第一步也是获取数据
然后校验数据
保存数据
序列化返回数据
DjangoRESTframework 已经帮我们封装好了序列化、反序列化,我们使用的时候继承这些类就可以了。
使用的时候,把它当做一个应用,先到setting.py中注册rest_framework,然后使用的时候从rest_framework.generics中引入包,然后继承这些类。