drf request的封装
路由
urlpatterns = [
path('order/', views.OrderView.as_view()),
]
视图关系
class View(object):
@classonlymethod
def as_view(cls, **initkwargs):
def view(request, *args, **kwargs):
return self.dispatch(request, *args, **kwargs)
return view
class APIView(View):
@classmethod
def as_view(cls, **initkwargs):
view = super().as_view(**initkwargs)
return csrf_exempt(view)
def dispatch(self, request, *args, **kwargs):
# 新request对象内部包含老request(_reuqest=老request)
request = self.initialize_request(request, *args, **kwargs)
self.request = request
self.initial(request, *args, **kwargs)
# 通过反射执行“get”方法,并传入新的request
handler = getattr(self, request.method.lower())
response = handler(request, *args, **kwargs) # get(requst)
return self.response
class OrderView(APIView):
def get(self,request,*args,**kwargs):
return Response('ok')
drf 对request的封装
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.request import Request
class UserView(APIView):
def get(self, request, *args, **kwargs):
# drf的request对象
print(request.query_params)
print(request.data)
print(request.auth)
print(request.user)
# django的request对象
print(request.GET)
print(request.method)
print(request.path_info)
return Response("...")