DRF框架APIView的请求生命周期

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方法

"""
1)as_view方法完成路由配置,禁用了csrf认证规则
结论:所有继承APIView的子类,都不受csrf认证规则的限制

2)将请求处理的任务交给dispath方法完成
"""

2、重写的dispatch方法

"""
完成了三大核心任务:
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', ], }

 

posted @ 2020-02-18 11:39  Hank·Paul  阅读(137)  评论(0编辑  收藏  举报