REST难点
www.django-rest-framework.org/tutorial/1-serialization/
【源码分析】
模型序列化
-- 正向序列化
-- 将模型转换成JSON
-- 反向序列化
-- 将JSON转换成模型
serialization
-- 在模块serializers
-- HyperLinkedModelSerializer
-- 序列化模型,并添加超链接
-- Serializer
-- 手动序列化
双R
-- Request
-- rest_framework.request
-- 将Django中的Request作为了自己的一个属性 _request
-- 属性和方法
-- content_type
-- stream
-- query_params
-- data
-- 同时兼容 POST,PUT,PATCH
-- user
-- 可以直接在请求上获取用户
-- 相当于在请求上添加一个属性,用户对象
-- auth
-- 认证
-- 相当于请求上添加了一个属性,属性值是token
-- successful_authenticator
-- 认证成功
-- Response
-- 依然是HttpResponse的子类
-- 自己封装的
-- data 直接接受字典转换成JSON
-- status 状态码
-- 属性和方法
-- rendered_content
-- status_text
APIView
-- renderer_classes
-- 渲染的类
-- parser_classes
-- 解析转换的类
-- authentication_classes
-- 认证的类
-- throttle_classes
-- 节流的类
-- 控制请求频率的
-- permission_classes
-- 权限的类
-- content_negotiation_class
-- 内容过滤类
-- metadata_class
-- 元信息的类
-- versioning_class
-- 版本控制的类
-- as_view()
-- 调用父类中的as_view -> dispatch
-- dispatch被重写(调用的是APIView中的dispatch)
-- initialize_request
-- 使用django的request构建了一个REST中的Request
-- REST重写了request,并将django的request保存在_request
-- initial
-- perform_authentication
-- @property 将方法修改为属性
-- 执行用户认证
-- 遍历我们的认证器
-- 如果认证成功会返回一个元组
-- 元组中的第一个元素就是 user
-- 第二个元素就是 auth,token
-- check_permissions
-- 检查权限
-- 遍历我们的权限检测器
-- 只要有一个权限检测没通过
-- 就直接显示权限被拒绝
-- 所有权限都满足,才算是拥有权限
-- check_throttles
-- 检测频率
-- 遍历频率限制器
-- 如果验证不通过,就需要等待
-- csrf_exempt
-- 所有APIView的子类都是csrf豁免的
错误码
-- 封装 status模块中
-- 实际上就是一个常量类
针对视图函数的包装
-- CBV
-- APIView
-- FBV
-- 添加 @api_view装饰器
-- 必须手动指定允许的请求方法