drf序列化大总结

目录
  • 一、APIView的请求生命周期
  • 二、序列化组件
    • 视图类中使用序列化
    • Meta配置类中的配置
    • 自定义校验规则
    • 入库方法
    • 自定义字段
    • 如果有群改操作
    • 重(难)点
  • 三、视图家族
  • 四、路由组件
  • 五、权限认证

一、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)前台接口权限:三大认证
'''

drf序列化大总结_第1张图片

你可能感兴趣的:(drf序列化大总结)