2012-03-19 3 views
1

내 응용 프로그램은 twisted "백엔드 서버"와 django "미들웨어"로 구성됩니다. 꼬인 부분은 데이터베이스에 액세스하고 www 또는 xml을 통해 콘텐츠를 제공하기 위해 .tac file에 설정된 collection of services입니다. django 부분은 웹 사이트에서 사용자와의 모든 상호 작용을 처리합니다.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 signal을 사용하려고합니다. 신호 작품을 내보내지만, 정말 신호를 대상으로 제공하는 트위스트 객체에 대한 참조를 얻는 방법을 볼 수 없습니다 :

  • 서비스가 모든 app.tac에서 인스턴스화하고 그것을 가져올 수하지 않는 것 이러한 파일에서 이러한 개체를 다시 또는 트위스트 된 응용 프로그램을 실행하는 동안 그들에 대한 참조를 다시 얻으십시오.
  • #twisted IRC 채널에서 장고 앱에 내 신호의 대상이 될 것으로 예상되는 서비스에 대한 참조를 전달하는 조언을 받았지만 위의 코드 스 니펫에 나와있는 것처럼 장고 앱 단순히 WSGIHandler 객체이며 서비스 참조를 어떻게 든 삽입 할 수 있다고해도 앱 내에서 액세스하는 방법을 알 수 없습니다. 또한 이러한 접근 방식은 백엔드와 미들웨어를 오히려 단단히 묶을 것입니다. 이것은 신호가 처음부터 예방하려고하는 것입니다.

어떻게 장고에서 트위스트로 알림을 보낼 수 있습니까?

답변

2

장고화 된 솔루션은 아마도 객체를 settings.py에 넣는 것입니다. 이것은 물론 끔찍한 일입니다. 그러나 Django는이 전역 상태에 지속적으로 의존하기 때문에 응용 프로그램에 상태를 제공하는 데 널리 사용되거나 사용되는 메커니즘조차 가지고 있지 않기 때문에 그냥 함께 살아야 할 수 있습니다.

당신은 당신의 전술 파일이 뭔가를 추가 할 수 있습니다

import settings 
settings.twisted_listener = your_service 

이것은이 -ation "이것보다 아마 더 깨끗한 방법이 없다"로 많이 추천하지 않습니다. 이보다 더 좋은 세상에서 장고는 settings.py을 갖지 않을 것입니다. 응용 프로그램 구성을위한 인수를 허용하는 API가 있습니다.

관련 문제