Django - DRF - 调度方法流程

2024-04-19

我正在与 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
        # ...

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

From docs https://docs.djangoproject.com/en/1.8/topics/class-based-views/intro/:

as_view 入口点创建类的实例并调用 它的dispatch()方法。调度查看请求以确定 无论是 GET、POST 等,并将请求中继到匹配的 方法(如果已定义),否则引发 HttpResponseNotAllowed。

所以我想如果我在调度中返回一个错误的响应,post方法不应该被执行,为什么它会被执行?我在这里做错了什么?


由于您没有提供调度方法代码,因此这只是猜测。 我的 2 美分是,您在某个时刻调用 MasterClass 的 super,它将调用 APIView 调度,而 APIView 调度将调用您的 POST。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django - DRF - 调度方法流程 的相关文章

随机推荐