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中取


浙公网安备 33010602011771号