• 【1119 | Day62】drf之请求模块


    一、请求模块

    1. drf的request是在wsgi的request基础上再次封装

    2. wsgi的request作为drf的request一个属性:_request

    3. 新的request对旧的request做了完全兼容

    4. 新的request对数据解析更规范化:

      所有的拼接参数都解析到query_params中,所有数据包数据都被解析到data

      query_params和data属于QueryDict类型,可以 .dict() 转化成原生dict类型

    二、原生Django CBV 源码分析:View

    • as_view()是入口,得到view函数地址
    • 请求来了调用view函数,内部调用dispatch函数完成请求分发
    • dispatch函数将请求方式映射成视图类的同名方法,完成请求的处理,得到相应
    • 再将相应的结果一层层返回

    三、drf CBV 源码分析:APIView

    • as_view()是入口,得到view函数地址,在范围view函数地址时局部禁用csrf认证
    • 请求来了调用view函数,内部调用(APIView类的)dispatch函数完成请求分发
    • dispatch函数二次封装request完成三大认证后,再将请求方式映射成视图类的同名方法,完成请求的处理,得到响应再对相应做渲染处理
    • 再将相应的结果一层层返回

    四、APIView做的处理

    • as_view: 就干了一件事,所有继承drf的基本视图类APIView的视图类,都不再做csrf认证校验
    • dispatch:
      1. 二次封装request

      走drf的Request初始化方法__init__ >>> self._request = request
      drf的Request的getter方法__getattr__ >>> 先从self._request反射取属性,没取到再从drf的request中取

      1. 三大认证

      self.initialize_request(request, *args, **kwargs)

    五、request源码分析

    # as_view()
     	# 核心走了父类as_view
         view = super(APIView, cls).as_view(**initkwargs)
         # 返回的是局部禁用csrf认证的view视图函数
         return csrf_exempt(view)
    
    # dispatch(self, request, *args, **kwargs)
         # 二次封装request对象
         request = self.initialize_request(request, *args, **kwargs)
         # 自定义request规则
         self.initial(request, *args, **kwargs)
    
    # initialize_request(self, request, *args, **kwargs)
     	 # 原生request封装在request._request
    
    # initial(self, request, *args, **kwargs)
         # 认证
         self.perform_authentication(request)
         # 权限
         self.check_permissions(request)
         # 频率
         self.check_throttles(request)
    

    核心:

    request除了可以访问原wsgi协议的request所有内容,还可以访问 query_params、data。

  • 相关阅读:
    设计思考者
    最佳体验: 如何为产品和服务设计不可磨灭的体验
    突破创新窘境:用设计思维打造受欢迎的产品
    体验经济时代
    童装设计初探
    时装买手自学通:企划·组货·直播·创业
    中国房地产演进的三个阶段
    服装商品企划实务与案例
    酒店运营管理
    室内设计与施工
  • 原文地址:https://www.cnblogs.com/fxyadela/p/11891843.html
Copyright © 2020-2023  润新知