如何从Django向twisted发送通知?

2024-04-25 04:02:50 发布

您现在位置:Python中文网/ 问答频道 /正文

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

twisted web服务在我认为是canonical way中实例化了django WSGI应用程序:

# .../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应用程序运行之后,似乎不可能从该文件导入这些对象或重新获取对它们的引用。在
  • #twistedIRC通道上,我得到了一个建议,当我实例化该服务时,该服务应该是我信号的目标,但正如上面的代码片段所示,django应用程序只是一个WSGIHandler对象,即使我设法将服务引用注入其中,我不知道如何从应用程序中访问它。而且,这种方法将后端和中间件紧密地耦合在一起——这正是signal打算首先阻止的。在

如何从Django向Twisted发送通知?


Tags: 中间件对象django实例用户selfapp应用程序
1条回答
网友
1楼 · 发布于 2024-04-25 04:02:50

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

您可以在tac文件中添加类似的内容:

import settings
settings.twisted_listener = your_service

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

相关问题 更多 >