【发布时间】:2016-11-20 07:40:03
【问题描述】:
我创建了一个基本 api 视图,它从 APIView 扩展而来,我在其中记录响应时间、记录请求和其他常见内容。
现在,我还想在这里添加请求验证,使用子类 Views 中定义的 Serializer。我认为合适的地方是把它放在dispatch() 方法中。但是在我调用API.dispatch() 方法之前,request.data 并没有准备好。所以,那是行不通的。有人可以在正确的方向上帮助我如何将验证移动到一个地方吗?
这是类结构:
class BaseView(APIView):
validation_serializer = None
def dispatch(self, request, *args, **kwargs):
# Some code here
# How to use `validation_serializer` here, to validate request data?
# `request.data` is not available here.
response = super(BaseView, self).dispatch(request, *args, **kwargs)
# Some code here
return response
class MyView(BaseView):
validation_serializer = ViewValidationSerializer
def post(self, request, *args, **kwargs):
pass
我认为另一种方法是在 post() 方法的顶部使用装饰器。但是,如果只有一种更简洁的方法,而不是在整个项目中放置装饰器?
注意:类似于这里的问题:Django - DRF - dispatch method flow。但根据那里的建议,我不想只是从 DRF 源代码中复制整个 dispatch 方法。
【问题讨论】:
标签: python django django-rest-framework