Python 在所有方法Django Rest Framework ModelViewSet之后调用函数
我想在ModelViewSet中的所有方法之后调用函数。函数本身将用作外部事件日志。因此,不会修改来自视图的响应。我不知道如何做到这一点。我的ModelViewSet是一个非常基本的,定义了序列化器类和querysetPython 在所有方法Django Rest Framework ModelViewSet之后调用函数,python,django,django-rest-framework,django-rest-viewsets,Python,Django,Django Rest Framework,Django Rest Viewsets,我想在ModelViewSet中的所有方法之后调用函数。函数本身将用作外部事件日志。因此,不会修改来自视图的响应。我不知道如何做到这一点。我的ModelViewSet是一个非常基本的,定义了序列化器类和queryset 任何帮助都将不胜感激 您始终可以覆盖任何python类。重写所有的方法可能有点棘手,我想这只会创建不必要的日志。您应该只覆盖真正重要的方法。以下是一个例子: 类日志ModelViewSet(ViewSet.ModelViewSet): def执行_创建(自、序列化程序): 打印(
任何帮助都将不胜感激 您始终可以覆盖任何python类。重写所有的方法可能有点棘手,我想这只会创建不必要的日志。您应该只覆盖真正重要的方法。以下是一个例子:
类日志ModelViewSet(ViewSet.ModelViewSet):
def执行_创建(自、序列化程序):
打印('perform_create')
serializer.save(所有者=self.request.user)
def finalize_响应(自我、请求、响应、*args、**kwargs):
xresponse=super()。完成_响应(请求、响应、*args、**kwargs)
打印('finalize_response',xresponse)
返回xresponse
更像这样。。。您应该在这里看到源代码,它并没有那么复杂。您可以随时重写任何python类。重写所有的方法可能有点棘手,我想这只会创建不必要的日志。您应该只覆盖真正重要的方法。以下是一个例子:
类日志ModelViewSet(ViewSet.ModelViewSet):
def执行_创建(自、序列化程序):
打印('perform_create')
serializer.save(所有者=self.request.user)
def finalize_响应(自我、请求、响应、*args、**kwargs):
xresponse=super()。完成_响应(请求、响应、*args、**kwargs)
打印('finalize_response',xresponse)
返回xresponse
更像这样。。。您应该可以在这里看到源代码,它没有那么棘手。覆盖查看方法
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
覆盖视图的方法
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
我找到了一个覆盖finalize\u响应方法的变通方法。这既有请求也有响应。有更好的方法吗?这不是任何解决办法,这是你真正要做的。我正在用你的例子编辑这篇文章。你为什么在这里添加
perform\u create
?这可能会在这里造成混乱。举个例子。问题是记录每个函数调用,所以我添加了perform\u create
。如果你想找一个更好的例子,请编辑答案:)我找到了一个替代finalize\u response方法的解决方法。这既有请求也有响应。有更好的方法吗?这不是任何解决办法,这是你真正要做的。我正在用你的例子编辑这篇文章。你为什么在这里添加perform\u create
?这可能会在这里造成混乱。举个例子。问题是记录每个函数调用,所以我添加了perform\u create
。如果你想找一个更好的例子,请编辑答案:)