Come distribuire con ASGI.¶
Così come WSGI, Django supporta anche il deploy su ASGI, lo standard emergente di Pyhon per i web server e le applicazioni asincrone.
Il comando di gestione di Django startproject
imposta una configurazione ASGI di default per te, che puoi migliorare a seconda delle necessità del tuo progetto, e orientare ogni server per le applicazioni che sia ASGI-compliant al suo utilizzo.
Django comprende la documentazione per iniziare ad utilizzare i seguenti server ASGI:
L’oggetto application
¶
Come WSGI, ASGI ti richiede di fornire una applicazione
chiamabile che l’application server utilizza per comunicare con il tuo codice. Normalmente è fornita come un oggetto chiamato application
in un modulo Python accessibile al server.
Il comando startproject
crea un file <project_name>/asgi.py
che contiene questa application
richiamabile.
Non è usato dal server di sviluppo (runserver
), ma può essere utilizzato da ogni server ASGI sia in sviluppo che in produzione.
I server ASGI normalmente prendono il percorso dell’applicazione richiamabile come stringa; per molti progetti Django, avrà questo aspetto: myproject.asgi:application
.
Avvertimento
Mentre l’handler di default di Django avvierà tutto il tuo codice un thread sincrono, se scegli di avviare il tuo handler asincrono devi essere al corrente della async-safety.
Non chiamare funzioni sincrone o librerie bloccanti in alcun codice asincrono. Django ti impedisce di farlo con le parti di Django che non sono async-safe, ma lo stesso potrebbe non essere vero per applicazioni di terze parti o librerie Python.
Configura il modulo settings¶
Quando il server ASGI carica la tua applicazione, Django ha bisogno di importare il modulo settings - che è il posto dove la tua intera applicazione è definita.
Django usa la variabile d’ambiente envvar:DJANGO_SETTINGS_MODULE per trovare il modulo di impostazioni appropriato. Deve contenere il percorso puntato al modulo delle impostazioni. Puoi usare valori diversi per lo sviluppo e la produzione; dipende tutto da come organizzi le tue impostazioni.
Se questa variabile non è impostata, il file predefinito asgi.py
lo imposta a mysite.settings
, dove mysite
è il nome del tuo progetto.
Caricare il middleware ASGI¶
Per applicare un middleware ASGI, o per incorporare Django in un’altra applicazione ASGI, puoi avvolgere l’oggetto application
di Django nel file asgi.py
. Per esempio:
from some_asgi_library import AmazingMiddleware
application = AmazingMiddleware(application)