Cómo desplegar con ASGI

Además de WSGI, Django también admite el despliegue en ASGI, el estándar emergente de Python para servidores y aplicaciones web asíncronos.

La orden de comando startproject de administración configura una configuración ASGI por defecto para ti, que puedes ajustar según sea necesario para tu proyecto, y dirigir cualquier servidor de aplicación ASGI-compliant a utilizar.

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

El objeto application

Al igual que WSGI, ASGI te pide que proporciones un llamable application el cual el servidor de aplicaciones utiliza para comunicarse con tu código. Se proporciona comúnmente como un objeto denominado application en un módulo Python accesible al servidor.

La orden de comando startproject crea un archivo <project_name>/asgi.py que contiene tal llamable application.

No se utiliza por el servidor de desarrollo (runserver), pero puede utilizarse por cualquier servidor ASGI, ya sea en desarrollo o producción.

Los servidores ASGI suelen tomar la ruta al llamable de aplicación como una cadena; para la mayoría de los proyectos Django, esto parecerá myproject.asgi:application.

Advertencia

Mientras que el manejo de ASGI por defecto de Django ejecutará todo tu código en un hilo sincrónico, si decides ejecutar tu propio manejador asíncrono debes ser consciente de la seguridad asíncrona.

No llames a funciones o bibliotecas síncronicas bloqueantes en ningún código asíncrono. Django te impide hacer esto con las partes de Django que no son seguras para ejecutarse asíncronicamente, pero lo mismo puede no ser cierto para aplicaciones terceras o bibliotecas de Python.

Configuración del módulo de configuración

Cuando el servidor ASGI carga tu aplicación, Django necesita importar el módulo de configuración — allí está definida 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á definida, el archivo asgi.py por defecto la establece en mysite.settings, donde mysite es el nombre de tu proyecto.

Aplicación del middleware ASGI

Para aplicar middleware ASGI o para incrustar Django en otra aplicación ASGI, puedes envolver el objeto application de Django en el archivo asgi.py. Por ejemplo:

from some_asgi_library import AmazingMiddleware

application = AmazingMiddleware(application)