Django - DRF - 调度方法流程

时间:2015-11-16 17:01:24

标签: django django-views django-rest-framework django-urls

我正在使用DRF来构建API,我使用了一个大师类对基于类的视图进行了一些验证:

class MasterClass(APIView):

    def dispatch(self, request, *args, **
        response = super(FaveoAPIView, self).dispatch(request, *args, **kwargs)
        # I call super because I need access to request data.
        # <some validations here>
        # Return a JsonResponse with an error message if validations fails

class MyView(MasteClass):

    def post(self, request, *args, **kwargs):
        # At this point request is: <WSGIRequest: POST '/api/path/'>
        # some DB transaction
        # ...

验证失败,至少有一个,但是DB事务正在执行,我实际上得到了一个带有dispatch方法错误消息的响应,但post方法在dispatch之前执行我使用断点来查看流,这将进入post方法,然后进入dispatch方法,就像它们是分离的线程一样。

来自docs

  

as_view入口点创建您的类和调用的实例   它的dispatch()方法。 dispatch查看要确定的请求   是否是GET,POST等,并将请求中继到匹配   如果定义了一个方法,或者如果没有,则引发HttpResponseNotAllowed。

所以我认为如果我在调度中返回错误的响应,则不应该执行post方法,为什么要执行?我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

由于您没有提供调度方法代码,因此只需猜测即可。 我的2美分是你在某个时刻调用MasterClass的超级,它会调用APIView调度来调用你的POST。