Så här distribuerar du med ASGI¶
Förutom WSGI stöder Django också distribution på ASGI, den nya Python-standarden för asynkrona webbservrar och applikationer.
Djangos hanteringskommando startproject
ställer in en standard ASGI-konfiguration åt dig, som du kan justera efter behov för ditt projekt och styra vilken ASGI-kompatibel applikationsserver som helst att använda.
Django innehåller dokumentation för att komma igång med följande ASGI-servrar:
Objektet ``applikation¶
I likhet med WSGI måste du i ASGI tillhandahålla en ”applikation” som applikationsservern använder för att kommunicera med din kod. Den tillhandahålls vanligen som ett objekt med namnet application
i en Python-modul som är tillgänglig för servern.
Kommandot startproject
skapar en fil <project_name>/asgi.py
som innehåller en sådan application
callable.
Den används inte av utvecklingsservern (runserver
), men kan användas av vilken ASGI-server som helst, antingen under utveckling eller i produktion.
ASGI-servrar tar vanligtvis sökvägen till applikationens anropsbarhet som en sträng; för de flesta Django-projekt kommer detta att se ut som myproject.asgi:application
.
Varning
Djangos standard ASGI-hanterare kör all din kod i en synkron tråd, men om du väljer att köra din egen async-hanterare måste du vara medveten om async-safety.
Anropa inte blockerande synkrona funktioner eller bibliotek i någon asynkron kod. Django hindrar dig från att göra detta med de delar av Django som inte är async-säkra, men detsamma kanske inte gäller för tredjepartsappar eller Python-bibliotek.
Konfigurera inställningsmodulen¶
När ASGI-servern laddar din applikation måste Django importera inställningsmodulen - det är där hela din applikation definieras.
Django använder miljövariabeln DJANGO_SETTINGS_MODULE
för att hitta rätt inställningsmodul. Den måste innehålla den prickade sökvägen till inställningsmodulen. Du kan använda ett annat värde för utveckling och produktion; det beror helt på hur du organiserar dina inställningar.
Om den här variabeln inte är inställd, ställer standard asgi.py
in den på mysite.settings
, där mysite
är namnet på ditt projekt.
Tillämpning av ASGI-mellanprogram¶
För att använda ASGI middleware, eller för att bädda in Django i en annan ASGI-applikation, kan du linda in Djangos application
-objekt i filen asgi.py
. Till exempel:
from some_asgi_library import AmazingMiddleware
application = AmazingMiddleware(application)