form ajax django webserver comet tornado

ajax - form - ¿Cómo usar Django con el servidor web Tornado?



django ajax form (4)

¿Cómo uso Django con el servidor web Tornado?


En el mundo real, conectaría Django y algún servidor web listo para producción con WSGI . Esta demostración muestra cómo puede ejecutar Tornado (y su servidor web) y Django lado a lado desde un módulo de Python que sirve diferentes prefijos de URL: https://github.com/bdarnell/django-tornado-demo . Sin embargo, Tornado bloquearía el servicio de cualquier solicitud dirigida a Django.


Es muy simple (especialmente con django 1.4).

1: solo construye tu proyecto django (y aplicaciones) y asegúrate de que funcione bien.

2- crear un nuevo archivo python en la carpeta raíz (mismo directorio donde usó django-admin.py startproject )

3- luego copie el código a continuación, edite la línea os.environ[''DJANGO_SETTINGS_MODULE''] y péguela en ese nuevo archivo .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+ debería ser así:

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()


Hay un proyecto llamado tornado-proxy que te ayudaría. Pero me gustaría recomendar que use Nginx . En la configuración de Nginx, ahora podría usar proxy_pass para dirigir sus llamadas de esta manera:

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


ACTUALIZAR:

Creé una demostración de trabajo mínima que muestra cómo usar el servidor web Tornado para ejecutar bien con django:

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

POSTE ORIGINAL:

Solo un comentario: el flujo de trabajo de la aplicación WSGI ha cambiado de 1.6 a 1.7. Tienes que reemplazar la importación.

import django.core.handlers.wsgi

con

from django.core.wsgi import get_wsgi_application

y cambiar la inicialización de la aplicación de

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

a

application = get_wsgi_application()

Este es el código modificado de la respuesta de 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()