APIView请求生命周期

Posted 请叫我py哥老湿,本哥积攒了一大堆技术干货,涵盖机器学习、数

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了APIView请求生命周期相关的知识,希望对你有一定的参考价值。

今日总结

"""
1、APIView请求生命周期
APIView的as_view(局部禁用csrf) => 走父级的as_view调用dispatch分发请求 => APIView自己重写了dispatch,使用自己完成分发 => 分发前完成request二次封装、数据解析 => 三大认证 => 请求的实际响应(自己的视图类的处理分发) => 出现了异常,就会交给异常模块处理异常 => 响应模块完成响应、渲染模块可以json或浏览器两种方式渲染

2、请求模块:
    request._request 被 request完全兼容
    request.query_params | request.data
    
3、解析模块:
    局部配置:parser_classes = [JSONParser, FormParser, MultiPartParser]
    全局配置:
        'DEFAULT_PARSER_CLASSES': [
            'rest_framework.parsers.JSONParser',
            'rest_framework.parsers.FormParser',
            'rest_framework.parsers.MultiPartParser'
        ],
        
4、响应模块:
    Respose(data=常量|列表|字典, status=网络状态码)
    
5、渲染模块:
    局部配置:renderer_classes = [JSONRenderer, BrowsableAPIRenderer]
    全局配置:
        'DEFAULT_RENDERER_CLASSES': [
            'rest_framework.renderers.JSONRenderer',
            'rest_framework.renderers.BrowsableAPIRenderer',  # 上线后尽量关闭
        ],
        
6、异常模块
    settings中配置:'EXCEPTION_HANDLER': 'api.exception.exception_handler',
    重写exception_handler方法:
"""
# 一定要在settings文件中将异常模块配置自己的异常处理函数
from rest_framework.views import exception_handler as drf_exception_handler
from rest_framework.response import Response

# 先交个drf处理客户端异常,如果结果response为None代表服务器异常,自己处理
# 最终一定要在日志文件中记录异常现象
def exception_handler(exc, context):
    response = drf_exception_handler(exc, context)
    detail = '%s - %s - %s' % (context.get('view'), context.get('request').method, exc)
    if not response:  # 服务端错误
        response =  Response({'detail': detail})
    else:
        response.data = {'detail': detail}

    # 核心:要将response.data.get('detail')信息记录到日志文件
    # logger.waring(response.data.get('detail'))

    return response

以上是关于APIView请求生命周期的主要内容,如果未能解决你的问题,请参考以下文章

CVB生命周期(APIView源码解析)

drf序列化大总结

request请求生命周期

[译] ASP.NET 生命周期 – ASP.NET 请求生命周期

我应该在 Fragment 中的啥生命周期状态下执行异步任务?

关于片段生命周期