源码入口:APIView类的dispatch方法中request = self.initialize_request(request, *args, **kwargs) 


class Test(APIView):
def get(self, request, *args, **kwargs):
# url拼接的参数
print(request._request.GET) # 二次封装方式
print(request.GET) # 兼容
print(request.query_params) # 拓展,兼容性最强
return Response('drf get ok')
def post(self, request, *args, **kwargs):
# # 所有请求方式携带的数据包
print(request._request.POST) # 二次封装方式
print(request.POST) # 兼容
print(request.data) # 拓展,兼容性最强,三种传参方式都可以:form-data,urlencoding,json
return Response('drf post ok') 总结drf对原生request做了二次封装,设置request._request等于原生request 原生request对象的属性和方法都可以被drf的request对象直接访问(兼容) drf请求的所有url拼接参数均被解析到query_params中,所有数据包数据都被解析到data中
|