• 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', ], }
  • 相关阅读:
    js 原生ajax实现
    layer 查看图片
    c# 操作XML
    C# 扩展方法
    c# 依赖注入
    visual studio 快捷键
    HIS系统结算后,没有更新单据状态为“已结算”
    网络流四·最小路径覆盖 HihoCoder
    飞行员配对(二分图最大匹配) 51Nod
    开心的小Q 51Nod
  • 原文地址:https://www.cnblogs.com/baohanblog/p/12325440.html
Copyright © 2020-2023  润新知