Come distribuire con WSGI.

La piattaforma primaria di deploy di Django è WSGI, lo standard Python per web server ed applicazioni.

Il comando di gestione di Django startproject imposta una configurazione WSGI di default minima per te, che puoi mettere a punto a seconda di quel necessita il progetto e fare in modo che ogni server di applicazione WSGI compliant la usi.

Django comprende la documentazione per iniziare con i seguenti server WSGI:

L’oggetto application

Il concetto chiave del deploy con WSGI è l”application richiamabile che il server dell’applicazione usa per comunicare con il tuo codice. Comunemente è fornita come un oggetto di nome application in un modulo Python accessibile al server.

Il comando startproject crea un file <project_name>/wsgi.py che contiene tale application richiamabile.

E” utilizzato sia da server di sviluppo Django sia da server di produzione WSGI.

I server WSGI ottengono il percorso all”application chiamabile dalla loro configurazione. Il server built-in di Django, cioè il comando runserver, lo legge dall’impostazione WSGI_APPLICATION. Di norma, è impostato a <project_name>.wsgi.application, che punta all”application callable in <project_name>/wsgi.py.

Configura il modulo settings

Quando il server WSGI 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 wsgi.py lo imposta a mysite.settings, dove mysite è il nome del tuo progetto. Ecco come di norma runserver scopre il file delle impostazioni predefinite.

Nota

Dal momento che le variabili d’ambiente sono process-wide, questo non funziona quando fai girare più siti Django nello stesso processo. Questo accade con mod_wsgi.

Per evitare questo problema, usa la modalità demone di mod_wsgi con ogni sito nel proprio processo demone o sovrascrivi il valore dall’ambiente forzando os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings" nel tuo wsgi.py.

Applicare il middleware WSGI

Per applicare il middleware WSGI puoi includere l’application object. Per esempio, potresti aggiungere queste linee alla fine di wsgi.py:

from helloworld.wsgi import HelloWorldApplication
application = HelloWorldApplication(application)

Puoi anche sostituire l’applicazione Django WSGI con un’applicazione WSGI personalizzata che deleghi successivamente all’applicazione Django WSGI, se desideri combinare un’applicazione Django con un’applicazione WSGI di un altro framework.