如何将Django与Tornado Web服务器一起使用?
答案 0 :(得分:46)
非常简单(尤其是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()
答案 1 :(得分:5)
<强>更新强>
我创建了一个最小的工作演示,演示了如何使用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()
答案 2 :(得分:4)
有一个名为tornado-proxy的项目可以帮到你。但我建议您使用Nginx。在Nginx配置中,您现在可以使用proxy_pass来引导您的呼叫:
location /comet {
proxy_pass http://localhost:8081;
}
location / {
proxy_pass http://localhost:8080;
}
答案 3 :(得分:2)
在现实世界中,您可以将Django和一些可用于生产的网络服务器与WSGI连接起来。这个演示展示了如何从一个服务于不同URL前缀的python模块中并行运行Tornado(以及它的web服务器)和Django:https://github.com/bdarnell/django-tornado-demo。 但是,龙卷风会阻止任何针对Django的请求。