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)