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