【问题标题】:Access HttpRequest object in request_finished callback in Django在 Django 的 request_finished 回调中访问 HttpRequest 对象
【发布时间】:2012-12-04 08:35:14
【问题描述】:

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

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

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

另外,这是在请求-响应周期之外执行功能的最佳方式吗?我现在不想使用像 Celery 这样的高级解决方案。

【问题讨论】:

    标签: python django django-signals


    【解决方案1】:

    那个信号并没有像你想象的那样做。从the handler code 可以看出,request_finished 信号是在请求处理完毕但在响应返回给用户之前发送的。因此,在用户看到任何响应之前,您添加到该信号的任何内容仍然会发生。

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

    【讨论】:

    • 谢谢丹尼尔,我想我会再次检查芹菜。对于我的一项要求,设置起来似乎太多了。 cron 工作的想法听起来也很诱人。
    【解决方案2】:

    hendrix 的 crosstown_traffic API 使用 Twisted 为 Django 提供服务,专门设计用于将逻辑延迟到响应通过线路发送到客户端之后立即执行。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-17
      • 2017-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-26
      • 1970-01-01
      • 2016-10-24
      相关资源
      最近更新 更多