04 APIView的请求生命周期

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',  # 浏览器渲染
    ],
}
原文地址:https://www.cnblogs.com/cnhyk/p/12458816.html