Как использовать Django с веб-сервером Tornado? - PullRequest
27 голосов
/ 29 марта 2010

Как использовать Django с веб-сервером Tornado?

Ответы [ 4 ]

46 голосов
/ 27 сентября 2012

это очень просто (особенно с django 1.4).

1 - просто создайте свой проект django (и приложения) и убедитесь, что он работает нормально.

2 - создать новый файл python в корневой папке (тот же каталог, где вы использовали django-admin.py startproject)

3-, затем скопируйте приведенный ниже код, отредактируйте строку os.environ['DJANGO_SETTINGS_MODULE'] и вставьте ее в этот новый файл .py.

import os
import tornado.httpserver
import tornado.ioloop
import tornado.wsgi
import sys
import django.core.handlers.wsgi
#sys.path.append('/home/lawgon/') # path to your project ( if you have it in another dir).


def main():
    os.environ['DJANGO_SETTINGS_MODULE'] = 'myProject.settings' # path to your settings module
    application = django.core.handlers.wsgi.WSGIHandler()
    container = tornado.wsgi.WSGIContainer(application)
    http_server = tornado.httpserver.HTTPServer(container)
    http_server.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

if __name__ == "__main__":
    main()

Django 1.6+ должно быть так:

import os
import tornado.httpserver
import tornado.ioloop
import tornado.wsgi
from django.core.wsgi import get_wsgi_application

def main():
    os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings' # path to your settings module
    application = get_wsgi_application()
    container = tornado.wsgi.WSGIContainer(application)
    http_server = tornado.httpserver.HTTPServer(container)
    http_server.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

if __name__ == "__main__":
    main()
5 голосов
/ 27 ноября 2014

UPDATE:

Я создал минимальную рабочую демонстрацию, которая показывает, как использовать веб-сервер Tornado для хорошей работы с django:

https://github.com/tamasgal/django-tornado

ОРИГИНАЛЬНЫЙ ПОЧТА:

Просто замечание: рабочий процесс приложения WSGI был изменен с 1.6 на 1.7. Вы должны заменить импорт

import django.core.handlers.wsgi

с

from django.core.wsgi import get_wsgi_application

и измените инициализацию приложения с

application = django.core.handlers.wsgi.WSGIHandler()

до

application = get_wsgi_application()

Это модифицированный код из ответа Moayyad Yaghi:

import os
import tornado.httpserver
import tornado.ioloop
import tornado.wsgi
import sys
import django.core.handlers.wsgi
from django.core.wsgi import get_wsgi_application
#sys.path.append('/home/lawgon/') # path to your project ( if you have it in another dir).


def main():
    os.environ['DJANGO_SETTINGS_MODULE'] = 'myProject.settings' # path to your settings module
    application = django.core.handlers.wsgi.WSGIHandler()
    application = get_wsgi_application()
    container = tornado.wsgi.WSGIContainer(application)
    http_server = tornado.httpserver.HTTPServer(container)
    http_server.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

if __name__ == "__main__":
    main()
4 голосов
/ 29 марта 2010

Существует проект под названием tornado-proxy , который поможет вам. Но я бы порекомендовал вам использовать Nginx . В конфигурации Nginx вы теперь можете использовать proxy_pass для направления ваших вызовов следующим образом:

location /comet {
  proxy_pass http://localhost:8081;
}

location / {
  proxy_pass http://localhost:8080;
}
2 голосов
/ 25 октября 2011

В реальном мире вы бы подключили Django и какой-нибудь готовый к работе веб-сервер с WSGI . Эта демонстрация показывает, как вы можете запускать Tornado (и его веб-сервер) и Django бок о бок из одного модуля python, обслуживающего разные префиксы URL: https://github.com/bdarnell/django-tornado-demo. Однако Торнадо заблокировал бы выполнение любого запроса, направленного на Джанго.

...