Как использовать Django с веб-сервером Tornado?
Как использовать Django с веб-сервером Tornado?
Ответ 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.