Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

это очень просто (особенно с 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()

Ответ 2

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

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

location / {
  proxy_pass http://localhost:8080;
}

Ответ 3

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()

Это модифицированный код из ответа Моайяда Яги:

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

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