我正在使用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方法,为什么要执行?我在这里做错了什么?
答案 0 :(得分:1)
由于您没有提供调度方法代码,因此只需猜测即可。 我的2美分是你在某个时刻调用MasterClass的超级,它会调用APIView调度来调用你的POST。