Comment déployer avec ASGI

En plus de WSGI, Django peut aussi être déployé avec ASGI, le standard Python émergent pour les serveurs et applications asynchrones.

La commande d’administration startproject de Django définit par défaut une configuration ASGI pour vous, que vous pouvez ensuite adapter aux besoins de votre projet ; cette configuration est alors utilisable par tout serveur d’applications se conformant au standard ASGI.

Django contient de la documentation sommaire pour les serveurs ASGI suivants :

L’objet application

Comme WSGI, ASGI met à disposition un objet exécutable application que le serveur d’applications utilise pour communiquer avec votre code. Ceci est généralement fourni par un objet nommé application dans un module Python accessible par le serveur.

La commande startproject crée un fichier <nom_de_projet>/asgi.py qui contient l’objet exécutable application.

Il n’est pas utilisé par le serveur de développement (runserver), mais peut être utilisé par tout serveur ASGI, que ce soit en développement ou en production.

Les serveurs ASGI acceptent généralement le chemin vers l’objet application sous forme de chaîne ; pour la plupart des projets Django, cela ressemble à monprojet.asgi:application.

Avertissement

Bien que le gestionnaire ASGI par défaut de Django exécute tout le code dans un fil d’exécution synchrone, si vous choisissez d’exécuter votre propre gestionnaire asynchrone, vous devez être conscient des mesures de sûreté asynchrones.

N’appelez pas de fonctions ou bibliothèques bloquantes à partir de code asynchrone. Django vous empêche de faire cela dans les parties de Django qui ne gèrent pas l’asynchronisme, mais ce n’est pas forcément le cas pour du code tiers ou de bibliothèques Python.

Configuration du module de réglages (settings)

Lorsque le serveur ASGI charge une application, Django doit importer le module settings, c’est là où se trouve toute la configuration de votre application.

Django utilise la variable d’environnement DJANGO_SETTINGS_MODULE pour trouver le module settings approprié. Il doit contenir le chemin vers le module settings avec la syntaxe pointée. Il est possible d’utiliser une valeur différente entre le développement et la production ; tout dépend de la façon d’organiser les réglages.

Si cette variable n’est pas définie, le fichier asgi.py par défaut la définit à monsite.settings, où monsite est le nom de votre projet.

Application des intergiciels ASGI

Pour appliquer un `intergiciel ASGI`_, ou pour envelopper Django dans une autre application ASGI, vous pouvez encapsuler l’objet application de Django dans le fichier asgi.py. Par exemple

from some_asgi_library import AmazingMiddleware
application = AmazingMiddleware(application)
Back to Top