在Django中的request_finished回调中访问HttpRequest对象

时间:2012-12-04 08:35:15

标签: python django django-signals

我试图在特定视图完成后向用户发送响应对象后调用函数 - 因此用户不必等待函数执行。

我正在尝试使用Django信号框架的request_finished,但我不知道如何访问Django信号发送给我的回调的kwargs中的HttpRequest对象。

看起来Signal对象不包含有关请求的任何有用信息。

另外,这是在请求 - 响应周期之外执行函数的最佳方法吗?我不想在这个时候使用像Celery这样的高级解决方案。

2 个答案:

答案 0 :(得分:1)

这个信号不符合你的想法。正如您在the handler code中看到的那样,request_finished信号在处理请求时发送,但在响应返回给用户之前发送。因此,在用户看到任何响应之前,您添加到该信号的任何内容仍会发生。

由于Web服务器的工作方式,在将响应返回给用户后无法运行代码。真的,唯一要做的就是使用像Celery这样的东西 - 你可以使用db表来模拟你自己的模拟任务队列的版本,然后让cron作业从表中获取项目,但是使用Celery会更容易。

答案 1 :(得分:0)

hendrix的crosstown_traffic API,使用Twisted来为Django提供服务,专门用于推迟逻辑,直到Response通过线路连接到客户端之后。

http://hendrix.readthedocs.org/en/latest/crosstown_traffic/