zoukankan      html  css  js  c++  java
  • 【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。

  • 相关阅读:
    用工具爬虎牙星秀VS用代码
    mysql简单的操作
    MySQL5.1的安装过程
    MySQL的安装
    SQL server 2008 的安装
    数据库基础知识
    HTTP协议
    TCP协议
    web系统基础
    软件测试缺陷的定义、产生原因、缺陷报告格式、缺陷报告
  • 原文地址:https://www.cnblogs.com/fxyadela/p/11891843.html
Copyright © 2011-2022 走看看