How use Django with Tornado web server?

前端 未结 4 973
醉话见心
醉话见心 2020-12-22 18:04

How do I use Django with the Tornado web server?

相关标签:
4条回答
  • 2020-12-22 18:42

    There's a project called tornado-proxy that would help you. But I would like to recommend that you use Nginx. In the Nginx config you could now use proxy_pass to direct your calls like this:

    location /comet {
      proxy_pass http://localhost:8081;
    }
    
    location / {
      proxy_pass http://localhost:8080;
    }
    
    0 讨论(0)
  • 2020-12-22 18:43

    it's very simple ( especially with django 1.4) .

    1 - just build your django project( and apps ) and make sure it works fine.

    2- create a new python file at the root folder ( same dir where you used django-admin.py startproject)

    3- then copy the code below , edit the os.environ['DJANGO_SETTINGS_MODULE'] line, and paste it in that new .py file.

    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+ it should be like this:

    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()
    
    0 讨论(0)
  • 2020-12-22 18:44

    UPDATE:

    I created a minimal working demo which shows how to use the Tornado web server to run nicely with django:

    https://github.com/tamasgal/django-tornado

    ORIGINAL POST:

    Just a remark: The WSGI application workflow has been changed from 1.6 to 1.7. You have to replace the import

    import django.core.handlers.wsgi
    

    with

    from django.core.wsgi import get_wsgi_application
    

    and change the application initialisation from

    application = django.core.handlers.wsgi.WSGIHandler()
    

    to

    application = get_wsgi_application()
    

    This is the modified code from the Moayyad Yaghi's answer:

    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()
    
    0 讨论(0)
  • 2020-12-22 18:54

    In real world you would connect Django and some production-ready webserver with WSGI. This demo shows how you can run Tornado (and it's webserver) and Django side by side from one python module serving different URL prefixes: https://github.com/bdarnell/django-tornado-demo. Tornado would block on serving any request directed to Django, though.

    0 讨论(0)
提交回复
热议问题