28

如何将 Django 与 Tornado Web 服务器一起使用?

4

4 回答 4

46

它非常简单(尤其是 django 1.4)。

1 - 只需构建您的 django 项目(和应用程序)并确保它工作正常。

2-在根文件夹(您使用的相同目录django-admin.py startproject)创建一个新的python文件

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()
于 2012-09-27T05:56:28.313 回答
6

更新:

我创建了一个最小的工作演示,展示了如何使用 Tornado Web 服务器与 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()
于 2014-11-27T07:50:16.633 回答
4

有一个名为tornado-proxy的项目可以帮助您。但我想推荐你使用Nginx。在 Nginx 配置中,您现在可以使用 proxy_pass 来引导您的调用,如下所示:

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

location / {
  proxy_pass http://localhost:8080;
}
于 2010-03-28T22:12:02.847 回答
2

在现实世界中,您可以将 Django 和一些生产就绪的网络服务器与WSGI连接起来。这个演示展示了如何从一个提供不同 URL 前缀的 python 模块并排运行 Tornado(和它的网络服务器)和 Django:https ://github.com/bdarnell/django-tornado-demo 。不过,Tornado 会阻止提供任何针对 Django 的请求。

于 2011-10-25T19:20:37.013 回答