drf序列化大总结

一、APIView的请求生命周期

'''
1)APIView的请求生命周期
    as_view():路由配置,禁用csrf
    dispatch():请求分发,请求解析、三大认证、异常处理、响应渲染
    request._request、request.query_params、request.data、request.META(请求头等诸多配置)
'''

二、序列化组件

视图类中使用序列化

'''
i)视图类中使用序列化
    serializer = UserModelSerializer(
        instance="对象(们)",
        data="数据(们)",
        many=False|True,  # 与数据或对象配套,代表操作的是否是多个
        partial=False|True,  # 运用在局部修改中,所以校验可以选填(required=False)
        context={'request': request}  # 视图、序列化传参 
    )
    serializer.is_valid(raise_exception=False|True)  # 校验
    serializer.save()  # 入库
    serializer.data  # 序列化后的数据
    serializer.errors  # 校验失败的信息
'''

Meta配置类中的配置

'''
model:关联的Model类
fields:所以序列化与反序列化字段
extra_kwargs:简单的校验规则
exclude:除某些字段
depth:连表深度
'''

自定义校验规则

'''
validate_字段名:局部校验钩子
validate:全局校验钩子
'''

入库方法

'''
create:增数据入库
update:改数据入库
后期这两个方法可能会被重写:涉及一些字段加密解密处理、不仅仅是单表入库操作
    user = User.create()
    UserDetail.create(user_id=user.id)
'''

自定义字段

'''
@property:在model类中自定义序列化字段
自定义字段 = serializers.字段类型(write_only=True, 其他规则):在serializer类中的自定义反序列化字段
系统字段 = serializers.字段类型(规则):覆盖字段,可以设置为只读、只写、可读可写
    外键字段的字段类型:PrimaryKeyRalatedField
'''

如果有群改操作

'''
自定义ListSerializer子类,重写update方法
在相关ModelSerializer中用list_serializer_class配置进行关联
'''

重(难)点

'''         
重(难)点:
    i)在视图类中初始化序列化类对象时的参数选择
    ii)指定好所有的序列化与反序列化字段
    iii)全局校验钩子的逻辑(难点)
    iv)是否要重写入库方法(难点)
'''

三、视图家族

'''
两个基类:APIView、GenericAPIVAPIView
        APIView:禁用csrf、解析、认证、渲染...
        GenericAPIVAPIView:禁用csrf、解析、认证、渲染... + 三个属性三个方法
        
工具类:mixin包下的五个类,使用GenericAPIVAPIView的三个属性三个方法(过渡)
    
工具视图类:mixin包下的类 + GenericAPIVAPIView 的组合形成的类
        配置三个属性 + 是否需要重写get、post等方法
    
视图集:ViewSetMixin重写as_view方法,可以自定义 请求方式 - 响应函数 的映射关系
        配置三个属性 + mixin包下的类 + GenericViewSet
        ViewSet
'''

四、路由组件

SimpleRouter

from django.conf.urls import url, include
from . import views
# 路由组件,必须配合视图集使用
from rest_framework.routers import SimpleRouter
router = SimpleRouter()

# 以后就写视图集的注册即可:BookV3APIView和BookV4APIView都是视图集
router.register('v3/books', views.BookV3APIView, 'book')
router.register('v4/books', views.BookV4APIView, 'book')

urlpatterns = [
    url('', include(router.urls))
]

五、权限认证

'''
i)RBAC:Role-Based Access Control - 基于角色权限的认证规则
        权限六表:用户表、分组表、权限表 + 三个关系表
        
ii)auth六表是否需要重写或断关联
        不需要
        
iii)admin|xadmin|自定义 提供的后台管理项目

iv)前台接口权限:三大认证
'''

猜你喜欢

转载自www.cnblogs.com/guyouyin123/p/12358457.html