drf请求模块分析
一、drf请求模块
-
、drf的request是在wsgi的request基础上再次封装
-
、wsgi的request作为drf的request一个属性:_request
-
、新的request对旧的request做了完全兼容
-
、新的request对数据解析更规范化:
所有的拼接参数都解析到query_params中,
所有数据包数据都被解析到data中
query_params和data属于QueryDict类型,可以 .dict() 转化成原生dict类型\
源码分析
1、drf的APIView类:重写了as_view(),同时他还继承了View类,主体逻辑还是调用父类View的as_view()。
2.as_view(),局部禁用了csrf认证 重点:所有继承drf的基本视图类APIView的视图类,都不在做csrf认证校验
3.drf的APIView类:重写了dispatch(),在内部对request进行了二次封装:self.initialize_request(request, *args, **kwargs)
- 内部核心:
走drf的Request初始化方法__init__:self._request = request
drf的Request的getter方法__getattr__:先从self._request反射取属性,没取到再到drf的request中取
5.核心:request除了可以访问原wsgi协议的request所有内容,还可以访问 query_params、data,它封装好了这两个方法属性