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