在所有方法之后调用函数 Django Rest Framework ModelViewSet

Invoke function after all methods Django Rest Framework ModelViewSet

我想在 ModelViewSet 中的所有方法之后调用一个函数。该函数本身将用作外部事件日志。因此,不会修改来自视图的响应。我无法弄清楚如何实现这一目标。我的 ModelViewSet 是一个非常基本的模型,其中定义了序列化器 class 和查询集。

如有任何帮助,我们将不胜感激。

您始终可以覆盖任何 python class。覆盖所有方法可能有点棘手,我想只会创建不必要的日志。您应该只覆盖真正重要的方法。这是一个例子:

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它并不那么棘手。

覆盖视图的 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