Cómo desplegar con WSGI

La plataforma de despliegue principal de Django es WSGI, la norma Python para servidores y aplicaciones web.

El comando de administración startproject de Django configura una configuración WSGI mínima por defecto para ti, que puedes ajustar según sea necesario para tu proyecto, y dirigir cualquier servidor de aplicación WSGI compatible a utilizar.

Django incluye documentación de inicio para los siguientes servidores WSGI:

El objeto application

El concepto clave del despliegue con WSGI es el llamable application que utiliza el servidor de aplicaciones para comunicarse con tu código. Se proporciona comúnmente como un objeto denominado application en un módulo Python accesible al servidor.

El comando startproject crea un archivo <project_name>/wsgi.py que contiene tal llamable application.

Se utiliza tanto por el servidor de desarrollo de Django como en los despliegues WSGI de producción.

Los servidores WSGI obtienen la ruta al llamable application desde su configuración. El servidor incorporado de Django, a saber el comando runserver, lo lee del parámetro de configuración WSGI_APPLICATION. Por defecto, está establecido en <project_name>.wsgi.application, que apunta al llamable application en <project_name>/wsgi.py.

Configuración del módulo de configuración

Cuando el servidor WSGI carga tu aplicación, Django necesita importar el módulo de configuración — allí se define toda tu aplicación.

Django utiliza la variable de entorno DJANGO_SETTINGS_MODULE para localizar el módulo de configuración apropiado. Debe contener el camino puntoado al módulo de configuración. Puedes usar un valor diferente para desarrollo y producción; todo depende de cómo organices tus configuraciones.

Si esta variable no está establecida, el archivo por defecto wsgi.py la establece en mysite.settings, donde mysite es el nombre de tu proyecto. Eso es cómo runserver descubre el archivo de configuración predeterminado por defecto.

Nota

Since las variables de entorno son procesos, esto no funciona cuando ejecutas múltiples sitios Django en el mismo proceso. Esto sucede con mod_wsgi.

Para evitar este problema, utiliza el modo daemon de mod_wsgi con cada sitio en su propio proceso demonio, o sobreescribe el valor desde la variable de entorno mediante os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings" en tu wsgi.py.

Aplicar middleware WSGI

Para aplicar middleware WSGI WSGI puedes envolver el objeto de aplicación. Por ejemplo, podrías agregar estas líneas en la parte inferior de wsgi.py:

from helloworld.wsgi import HelloWorldApplication

application = HelloWorldApplication(application)

También podrías reemplazar la aplicación WSGI de Django con una aplicación WSGI personalizada que más tarde delegue a la aplicación WSGI de Django, si deseas combinar una aplicación de Django con una aplicación WSGI de otro framework.