django信号request_finished

时间:2016-03-19 23:50:36

标签: django signals

我正在使用django信号并希望request_finished信号的处理程序仅在给定的http请求时才执行某些操作。有关如何做到这一点的任何想法?我以为我可以使用WSGIHandler这个信号的发送者,但不能处理它的请求参数。

1 个答案:

答案 0 :(得分:2)

无法在request_finished信号中获取请求实例,因为根据the docs,使用此信号发送的唯一参数是sender

sender
The handler class – e.g. django.core.handlers.wsgi.WsgiHandler – that handled the request.

请注意,在发件人中,您会收到一类发件人,而不是实例。

您可以使用process_response()方法编写custom middleware,以便能够检查请求选项,如下所示:

class MyCustomMiddleware(object):

    def process_response(self, request, response):
        if request.something == 'something':
            # do something
        return None

然后将MyCustomMiddleware放入设置文件中的MIDDLEWARE_CLASSES。在这种情况下,位置并不重要,因为已经形成了响应循环请求。