Request对象源码分析

视图类中使用的request对象,是rest_framework.request.Request的对象

# 源码
class Request:
  	#1 把老的request放到了新的request的_request属性了
    # 新的request--》request._request  是老的
  	-__init__:    self._request = request(这个request是老的)
      
    # 2 以后新的request用起来跟原来一样用
    	# 取出原来老request的属性,以下方法取,麻烦 
      	request._request.POST
        request._request.GET
        request._request.method
        # 重写了__getattr__ 魔法方法,. 拦截  --》对象.属性如果属性不存在,触发这个方法执行		
        # 新的request.POST,新的request中没有POST,触发Request类的__getattr__ 
        def __getattr__(self, attr):
          try:
            	# 通过反射,去拿老request的属性或方法
              return getattr(self._request, attr)
          except AttributeError:
              return self.__getattribute__(attr)
  
  	# 3 新的request有个data方法,包装成了数据属性
    		-前端无论什么编码方式传得body体中的数据,都从request.data中取,当字典用即可
      	-原生djagno,如果是formdata,urlencoded是从POST中取,如果是json,从body中取出来自己传
        
    # 4  新的request有个query_params方法,包装成了数据属性
      	-就是原来老的request的GET属性
      
    # 5 上传文件,跟之前一样用,但是人家重写了
    
    
    
    
 # 新的request重点
    -1 老的request是新的request._request
    -2  跟原来一样用
    -3 body提交的数据都从request.data中取
    -4 请求地址中的数据都从request.query_params中取

posted @ 2022-06-24 21:29  Yietong  阅读(51)  评论(0)    收藏  举报