как отправить уведомление от django на витую? - PullRequest
1 голос
/ 19 марта 2012

Мое приложение состоит из витого"внутреннего сервера" и django"промежуточного программного обеспечения".Скрученная часть представляет собой набор служб , настроенный в .tac файле для доступа к базе данных, предоставления содержимого через www или xml.Часть django обрабатывает все взаимодействия с пользователем на веб-сайте.

Искривленный веб-сервис создает приложение WSGI django, как я думаю, каноническим способом :

# .../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 в витую часть, в идеале, в одну из служб.Я пытаюсь использовать для этой цели сигнал django .Отправка сигнала работает, но я не вижу, как получить ссылку на витой объект, который будет служить целью для сигнала:

  • Все службы создаются в app.tac, и это делаетКажется невозможным импортировать эти объекты из этого файла или повторно получить ссылку на них после запуска витого приложения.
  • На IRC-канале #twisted я получил совет передать ссылку на сервисэто должно быть целью для моего сигнала приложению django, когда я его создаю, но, как показывает приведенный выше фрагмент кода, приложение django - это просто объект WSGIHandler, и даже если мне удастся каким-то образом вставить ссылку на службу в негоЯ не вижу, как получить к нему доступ из приложения.Кроме того, этот подход довольно тесно связал бы бэкэнд и промежуточное программное обеспечение - что именно этот сигнал намеревается предотвратить в первую очередь.

Как отправить уведомление из Django в Twisted?

1 Ответ

2 голосов
/ 19 марта 2012

Джангоизированное решение, вероятно, заключается в том, чтобы поместить объект в settings.py.Это, конечно, ужасно.Однако, поскольку Django постоянно полагается на этот кусок глобального состояния, до такой степени, что у него даже нет каких-либо других широко известных или используемых механизмов для предоставления состояния вашему приложению, вам, возможно, придется просто жить с ним.1003 * Вы можете добавить что-то вроде этого в ваш файл TAC:

import settings
settings.twisted_listener = your_service

Это не рекомендация, а "нет более чистых способов, чем эта".В лучшем мире, чем этот, у Джанго не было бы settings.py.У него будут API, которые принимают аргументы для настройки приложений.

...