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')

image
image

drf 对request的封装

image

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("...")

image

posted @ 2022-09-30 10:11  Sherwin_szw  阅读(13)  评论(0编辑  收藏  举报