serializer序列化的使用

关系属性序列化
当模型类中有外键时,则模型类对象中有关系属性
1.主键
2.字符串
3.自定义序列化器
反序列化:验证,保存
验证
类型
参数
自定义方法:validate_属性(attr),validte(attrs)
保存
create()
update()
调用
serializer=***Serializer(模型类对象,data=字典)
serializer.is_valid()
serializer.save()
模型类序列化器
ModelSerializer,继承自Serializer
封装:定义属性,create(),update()
需要定义的代码:验证
前提:模型类
Request对象
data===>json
query_params===>查询参数
Response对象
json
json列表
反馈

APIView
GenericAPIView+5个ModelMixin
ViewSet
router
其他功能
APIView

比django的View新增的功能:
1.新的request对象
2.新的response对象
3.更好的异常处理
4.dispatch()前的检查
GenericAPIView+5个ModelMixin

遵守restful规范,进行数据库操作(5个)
查询多个========>list
查询一个========>retrieve
创建============>create
修改============>update
删除============>destroy
GenericAPIView
属性queryset:指定查询集
属性serializer_class:指定序列化器类型
方法get_queryset():返回查询集
方法get_serializer_class():返回序列化器类型
方法get_serializer():返回序列化器对象
方法get_object():返回根据主键查询的对象,基于查询集
组合
ListAPIView
CreateAPIView
RetrieveAPIView
UpdateAPIView
DestroyAPIView
ListCreateAPIView
RetrieveUpdateAPIView
RetrieveDestroyAPIView
(drf未封装)UpdateDestroyAPIView
RetrieveUpdateDestroyAPIView
ViewSet

将所有操作封装在同一个类中,名称自定义,不再与请求方式小写一样
问题:请求方式无法找到处理方法
解决:在as_view()中指定字典参数,键为请求方式,值为方法名称,在dispatch()中根据请求方式,从字典中找到方法名称,执行
router

router=DefaultRouter()
router.register(‘前缀’,视图集类型,base_name=‘前缀’)
urlpattern+=router.urls
说明:装饰器action(methods=[请求方式],detail=True或False)
对比

APIView====>基本不用
GenericAPIView+5个ModelMixin====>定制
ModelViewSet,ReadOnlyModelViewSet===>高度封装
其他功能

配置,复制粘贴
作用范围:
全局,settings.py
局部,视图类
认证方式
权限判断
访问次数控制
过滤
排序
分页
异常处理
生成文档
总结

重要知识点

APIView
GenericAPIView+5个ModelMixin===>9个视图类
ModelViewSet,ReadOnlyModelViewSet,DefaultRouter

能够使用GenericAPIView获取图书信息
class BookView(ListModelMixin,GenericAPIView):
queryset=****
serializer_class=***
能够知道认证的使用方法
配置,指定认证的方式
basic:在浏览器中弹出窗口,输入用户名、密码
session:读取session信息
能够知道权限的使用方法
配置,指定权限的访问方式
提供了4种访问方式:
任何用户
认证用户
管理员
认证用户crud,普通用户只读

你可能感兴趣的:(serializer序列化的使用)