Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在所有方法Django Rest Framework ModelViewSet之后调用函数_Python_Django_Django Rest Framework_Django Rest Viewsets - Fatal编程技术网

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

Python 在所有方法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执行_创建(自、序列化程序): 打印(

我想在ModelViewSet中的所有方法之后调用函数。函数本身将用作外部事件日志。因此,不会修改来自视图的响应。我不知道如何做到这一点。我的ModelViewSet是一个非常基本的,定义了序列化器类和queryset


任何帮助都将不胜感激

您始终可以覆盖任何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
。如果你想找一个更好的例子,请编辑答案:)