我的应用程序由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应用程序运行之后,似乎不可能从该文件导入这些对象或重新获取对它们的引用。在#twisted
IRC通道上,我得到了一个建议,当我实例化该服务时,该服务应该是我信号的目标,但正如上面的代码片段所示,django应用程序只是一个WSGIHandler
对象,即使我设法将服务引用注入其中,我不知道如何从应用程序中访问它。而且,这种方法将后端和中间件紧密地耦合在一起——这正是signal打算首先阻止的。在如何从Django向Twisted发送通知?
Django化的解决方案可能是将一个对象放入
settings.py
。当然,这太可怕了。然而,由于Django一直依赖于这一全局状态,以至于它甚至没有任何其他广为人知或使用的机制来为应用程序提供状态,所以您可能不得不接受它。在您可以在tac文件中添加类似的内容:
与其说这是一个建议,不如说“没有比这更干净的方法了”。在一个比这个更好的世界里,Django不会有
settings.py
。它将具有接受用于配置应用程序的参数的api。在相关问题 更多 >
编程相关推荐