Lors de l'utilisation autre que SQLite avec Django, les informations de connexion à la base de données sont incluses dans settings.py, donc soyez prudent lorsque vous le gérez avec Github. De plus, étant donné que la destination de connexion change en fonction de l'environnement de développement, il est difficile de créer settings.py pour chaque destination de connexion. Tous les fichiers doivent être mis à jour en cas de modification autre que la destination de la connexion.
Après de nombreuses recherches, j'ai trouvé une bibliothèque appelée django-environ
.
Des paramètres tels que la destination de la connexion à la base de données peuvent être stockés dans des variables d'environnement système au démarrage de Django, et les variables d'environnement système stockées lors du chargement de settings.py peuvent être définies dans des champs tels que ALLOWED_HOSTS.
C'est une bibliothèque qui a été créée pour éliminer les tracas liés à la gestion de settings.py.
Site officiel est également bon, mais le site suivant était très facile à comprendre, je vais donc résumer la procédure pour introduire django-environ
.
Citation: Essayez de gérer les variables d'environnement avec django-environ
Installez simplement la bibliothèque django-environ
avec pip
.
pip install django-environ
Créez un fichier de définition de variable d'environnement. Nommez le fichier .env
et créez-le dans le même répertoire ** que ** manage.py.
La raison de sa création dans le même répertoire que manage.py sera décrite plus loin à l'étape 3.
djnago project
├── manage.py
├── .env
└── xxxx
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py
Dans le fichier .env, les informations spécifiques au système définies dans settings.py, telles que ALLOWED_HOSTS et DATABASES, sont définies au format clé = valeur. Lors de l'utilisation d'une base de données autre que SQLite, il est nécessaire de définir un nom d'utilisateur et un mot de passe dans DATABASES, mais si vous l'écrivez dans DATABASE_URL, vous pouvez l'écrire sur une ligne. Lorsque vous définissez plusieurs noms d'hôte dans ALLOWED_HOSTS, séparez-les par des virgules. Ce qui suit définit les éléments requis pour basculer entre l'environnement de développement et l'environnement de production.
.env
SECRET_KEY=aiueo
DEBUG=True
ALLOWED_HOSTS=
DATABASE_URL=mysql://USER:PASSWORD@HOST:PORT/NAME
La méthode de description de DATABASE_URL dans chaque base de données est la suivante.
Engine | Django Backend | URL |
---|---|---|
PostgreSQL | django.db.backends.postgresql_psycopg2 | postgres://USER:PASSWORD@HOST:PORT/NAME |
PostGIS | django.contrib.gis.db.backends.postgis | postgis://USER:PASSWORD@HOST:PORT/NAME |
MSSQL | sql_server.pyodbc | mssql://USER:PASSWORD@HOST:PORT/NAME |
MySQL | django.db.backends.mysql | mysql://USER:PASSWORD@HOST:PORT/NAME |
MySQL (GIS) | django.contrib.gis.db.backends.mysql | mysqlgis://USER:PASSWORD@HOST:PORT/NAME |
SQLite | django.db.backends.sqlite3 | sqlite:///PATH |
SpatiaLite | django.contrib.gis.db.backends.spatialite | spatialite:///PATH |
Oracle | django.db.backends.oracle | oracle://USER:PASSWORD@HOST:PORT/NAME |
Oracle (GIS) | django.contrib.gis.db.backends.oracle | oraclegis://USER:PASSWORD@HOST:PORT/NAME |
Redshift | django_redshift_backend | redshift://USER:PASSWORD@HOST:PORT/NAME |
Lisez les informations de configuration du fichier .env avec settings.py. Ci-dessous, le fichier .env dans BASE_DIR est lu. Si vous placez le fichier .env dans un répertoire différent de manage.py, vous devez spécifier le répertoire.
settings.py
import environ
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
env = environ.Env(DEBUG=(bool,True))
env.read_env(os.path.join(BASE_DIR,'.env'))
Tout ce que vous avez à faire est de spécifier le nom de la clé que vous souhaitez obtenir et d'obtenir les paramètres dans le fichier .env. La valeur définie est stockée dans la classe Env et peut être référencée dans un type de dictionnaire. Notez que si vous spécifiez une clé qui n'existe pas, une KeyError se produira. Cette zone a les mêmes spécifications que ʻos.environ`.
Vous pouvez également l'obtenir avec une fonction appelée get_value
. Avec get_value
, KeyError ne se produit pas même si la clé n'existe pas, et la valeur de retour peut être spécifiée comme argument. Vous pouvez également spécifier le type de retour.
Env.get_value(var, cast=None, default=NOTSET, parse_default=False) -> float
ALLOWED_HOSTS utilise une fonction qui renvoie un type de liste, en considérant que plusieurs noms d'hôtes sont définis. Dans DATABASES'default ', le nom d'utilisateur et le mot de passe pour se connecter à la base de données ont été définis individuellement, mais si vous utilisez la fonction `.db ()', le contenu de DATABASE_URL sera converti en un type de liste qui peut être lu par 'par défaut'. C'est très pratique parce que c'est le cas.
settings.py
SECRET_KEY = env.get_value('SECRET_KEY',str)
DEBUG = env.get_value('DEBUG', bool)
ALLOWED_HOSTS = env.list('ALLOWED_HOSTS')
SESSION_COOKIE_AGE = env.get_value('SESSION_COOKIE_AGE', int) #Période de validité de la session (secondes)
DATABASES = {
'default':env.db(),
}
django-environ
..env
.Recommended Posts