zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    怎么把分页按钮(首页,尾页等)放在表格右下角处?(已解决)
    zabbix单位符号
    容器、可迭代对象、迭代器、生成器之间的关系.
    Zabbix housekeeper processes more than 75% busy
    zabbix 告警信息模板
    zabbix 历史数据和趋势数据
    socket沾包问题
    面向对象--进阶
    面向对象
    列表 元组 字典
  • 原文地址:https://www.cnblogs.com/jinhongquan/p/12120417.html
Copyright © 2011-2022 走看看