我如何在Tornado Web服务器中使用Django?
非常简单(特别是使用 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()
更新:
我创建了一个最小化的演示,展示了如何使用Tornado Web服务器与Django良好地运行:
https://github.com/tamasgal/django-tornado
原始帖子:
只是一个备注:从1.6到1.7,WSGI应用程序工作流程已更改。您必须替换导入项。
import django.core.handlers.wsgi
使用
from django.core.wsgi import get_wsgi_application
并且将应用程序初始化更改为
application = django.core.handlers.wsgi.WSGIHandler()
to
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()
location /comet {
proxy_pass http://localhost:8081;
}
location / {
proxy_pass http://localhost:8080;
}
在现实世界中,您需要使用WSGI将Django与某些生产就绪的Web服务器连接起来。这个演示展示了如何从一个Python模块运行Tornado(和它的Web服务器)和Django并行服务不同的URL前缀:https://github.com/bdarnell/django-tornado-demo。 但是,Tornado会在提供任何针对Django的请求时阻塞。