python - 如何从 django 向twisted发送通知?

标签 python django twisted signals django-signals

我的应用程序包含 twisted “后端服务器”和 django “中间件”。扭曲的部分是collection of services设置在 .tac file要访问数据库,请通过 www 或 xml 提供内容。 django 部分处理与网站上用户的所有交互。

扭曲的 Web 服务实例化了 django WSGI 应用程序,我认为是 canonical way :

# .../wsgi/app.py:
from django.core.handlers.wsgi import WSGIHandler
application = WSGIHandler()

# .../web_service.py:
# (twisted imports...)
from wsgi.app import application
class WebServer(Resource):
    def __init__(self):
        Resource.__init__(self)
        self.wsgi_resource = WSGIResource(reactor,
                                          reactor.getThreadPool(),
                                          application)

现在我需要发送一条通知,例如用户已从 django 部分登录到twisted 部分,最好是登录到其中一项服务。我正在尝试使用 django signal为目的。发送信号有效,但我真的不知道如何获取对扭曲对象的引用来充当信号的目标:

  • 这些服务均在 app.tac 中实例化,并且在扭曲的应用程序运行后似乎无法从该文件导入这些对象或重新获取对它们的引用。
  • #twisted IRC channel 上,我得到了在实例化该服务时传递对服务的引用的建议,该服务应该是我向 django 应用程序发出信号的目标,但作为上面的代码片段显示,django 应用程序只是一个 WSGIHandler 对象,即使我设法以某种方式将服务引用注入(inject)其中,我也不知道如何从应用程序内访问它。此外,这种方法会将后端和中间件耦合得相当紧密——这正是信号首先要防止的。

如何从 Django 向 Twisted 发送通知?

最佳答案

Django 化的解决方案可能是将一个对象放入 settings.py 中。这当然是可怕的。然而,由于 Django 始终依赖于这个全局状态,以至于它甚至没有任何其他广为人知或使用的机制来为您的应用程序提供状态,您可能只能忍受它。

您可以将如下内容添加到您的 tac 文件中:

import settings
settings.twisted_listener = your_service

这与其说是建议,不如说是“可能没有比这更干净的方法了”。在比现在更好的世界中,Django 不会有 settings.py。它将具有接受配置应用程序参数的 API。

关于python - 如何从 django 向twisted发送通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9771085/

相关文章:

django - wsgi:没有名为 'settings' 的模块

python - 不可能在 Django 中按时间排序

python - 扭曲的启动/停止工厂/协议(protocol)噪音较小的日志消息

python - 处理来自同一事件循环的 SimpleXMLRPCServer 调用和 Asyncore.dispatchers 事件

python - 如何从aiohttp中的url获取查询字符串参数?

Python -> 复制目录,而另一个进程从中删除/添加文件

Django - 如何在 queryset .values() 中获取显示名称

python-3.x - Scrapy - 按时间间隔运行

python - 列表输出中需要 float

python - csv.DictReader 文件末尾异常