我正在与 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方法不应该被执行,为什么它会被执行?我在这里做错了什么?