• 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
    
  • 相关阅读:
    debug 调试Windows service服务调试
    Windows Service 创建 发布
    SQL Server 触发器
    c# core api 配置redis
    Core Api 搭建Swagger
    c# core api 自定义特性
    本地iis配置;,NET系统本地发布发布 通过配置路由器可以实现公网访问
    c# 线程的几种实现方式
    c# Thread.Sleep();
    2019创建 core api 加配置swagger
  • 原文地址:https://www.cnblogs.com/jinhongquan/p/12120417.html
Copyright © 2020-2023  润新知