我想在ModelViewSet中的所有方法之后调用一个函数。该函数本身将用作外部事件日志。因此,不会修改来自视图的响应。我无法弄清楚如何实现这一目标。我的模型视图集是一个非常基本的模型视图集,定义了序列化程序类和查询集。
任何帮助将不胜感激。
覆盖视图的dispatch
方法。
class MyDRFView(...):
def my_custom_logging_method(self, request, response, *args, **kwargs):
# do something useful here.....
...
def dispatch(self, request, *args, **kwargs):
response = super().dispatch(request, *args, **kwargs)
self.my_custom_logging_method(request, response, *args, **kwargs)
return respons
您始终可以覆盖任何 python 类。 覆盖所有方法可能有点棘手,我想只会创建不必要的日志。您应该只重写真正重要的方法。下面是一个示例:
class LoggingModelViewSet(viewsets.ModelViewSet):
def perform_create(self, serializer):
print('Invoked perform_create')
serializer.save(owner=self.request.user)
def finalize_response(self, request, response, *args, **kwargs):
xresponse = super().finalize_response(request, response, *args, **kwargs)
print('finalize_response', xresponse)
return xresponse
还有更多这样的...你应该在这里看到来源 https://github.com/encode/django-rest-framework/blob/master/rest_framework/viewsets.py#L217 它不是那么棘手。