APIView的请求生命周期
重写的as_view方法
1)as_view方法完成路由配置,返回配置函数是 csrf_exempt(view),也就是禁用了csrf认证规则
结论:所有继承APIView的子类,都不受csrf认证规则的限制
2)将请求处理的任务交给dispath方法完成
重写dispatch方法
完成了三大核心任务:
1)请求对象的处理:请求解析模块
2)请求过程的处理:三大认证模块 => 自己代码完成处理
3)请求结果的响应:异常模块处理异常响应 | 响应渲染模块处理正常响应
请求解析模块
1)二次封装了原生Django的wsgi协议的request对象,并做了向下兼容(原来request对象的内容,用现在的request对象都能访问)
2)将所有拼接参数都放在request.query_params
中,将所有数据包参数都放在request.data
中
3)路由的有名无名分组的数据还是保存在args和kwargs中
# 解析模块可以在settings.py自定义解析配置
REST_FRAMEWORK = {
# 解析模块
'DEFAULT_PARSER_CLASSES': [
'rest_framework.parsers.JSONParser', # json
'rest_framework.parsers.FormParser', # urlencoded
'rest_framework.parsers.MultiPartParser' # form-data
],
# 渲染模块
'DEFAULT_RENDERER_CLASSES': [
'rest_framework.renderers.JSONRenderer',
'rest_framework.renderers.BrowsableAPIRenderer', # 上线后会注释
],
}
响应渲染模块
1)当三大认证模块和自己处理请求的视图逻辑没有出现异常时,会执行响应渲染模块
2)响应的数据会交给渲染模块来完成数据的渲染,渲染方式有两种:Json格式数据渲染、Brower格式数据渲染
# 渲染模块可以在settings.py自定义解析配置
REST_FRAMEWORK = {
# 渲染模块
'DEFAULT_RENDERER_CLASSES': [
'rest_framework.renderers.JSONRenderer', # 渲染json数据类型
# 浏览器渲染,上线后会注释,不然浏览器请求接口就暴露了后台语言
'rest_framework.renderers.BrowsableAPIRenderer', # 浏览器渲染
],
}