Django Utilizzo delle variabili di ambiente per gestire le impostazioni tra i server


Esempio

L'utilizzo delle variabili d'ambiente è un modo ampiamente utilizzato per impostare la configurazione di un'app in base all'ambiente, come indicato nell'app Twelve-Factor .

Poiché è probabile che le configurazioni cambino tra gli ambienti di distribuzione, questo è un modo molto interessante per modificare la configurazione senza dover scavare nel codice sorgente dell'app, oltre a tenere segreti al di fuori dei file dell'applicazione e del repository del codice sorgente.

In Django, le impostazioni principali si trovano come settings.py nella cartella del tuo progetto. Poiché si tratta di un semplice file Python, è possibile utilizzare il modulo os di Python dalla libreria standard per accedere all'ambiente (e persino avere i valori predefiniti appropriati).

settings.py

import os

SECRET_KEY = os.environ.get('APP_SECRET_KEY', 'unsafe-secret-key')

DEBUG = bool(os.environ.get('DJANGO_DEBUG', True) == 'False')

ALLOWED_HOSTS = os.environ.get('DJANGO_ALLOWED_HOSTS', '').split()

DATABASES = {
    'default': {
        'ENGINE': os.environ.get('APP_DB_ENGINE', 'django.db.backends.sqlite3'),
        'NAME': os.environ.get('DB_NAME', 'db.sqlite'),    
        'USER': os.environ.get('DB_USER', ''),
        'PASSWORD': os.environ.get('DB_PASSWORD', ''),
        'HOST': os.environ.get('DB_HOST', None),
        'PORT': os.environ.get('DB_PORT', None),
        'CONN_MAX_AGE': 600,
    }
}

Con Django puoi cambiare la tua tecnologia di database, in modo che tu possa usare sqlite3 sul tuo computer di sviluppo (e questo dovrebbe essere un predefinito corretto per il commit su un sistema di controllo del codice sorgente). Anche se questo è possibile, non è consigliabile:

I servizi di supporto, come il database dell'applicazione, il sistema di accodamento o la cache, sono un'area in cui la parità di sviluppo / sviluppo è importante. ( L'app Twelve-Factor - Dev / prod parity )

Per utilizzare un parametro DATABASE_URL per la connessione al database, si prega di dare un'occhiata all'esempio correlato .