[PYTHON] Changer la valeur de paramètre de setting.py en fonction de l'environnement de développement

Aperçu

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

Méthode d'introduction

  1. Installation de la bibliothèque
  2. Création d'un fichier de définition de variable d'environnement
  3. Incorporer dans settings.py

Étape 1

Installez simplement la bibliothèque django-environ avec pip.

pip install django-environ

Étape 2

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

Étape 3

Lire le fichier .env

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'))

Comment définir chaque champ

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(),
}

Résumé

Recommended Posts

Changer la valeur de paramètre de setting.py en fonction de l'environnement de développement
Changer le volume de Pepper en fonction de l'environnement environnant (son)
Comment configurer l'environnement de développement d'ev3dev [version Windows]
Introduction à Python Préparons l'environnement de développement
Paramètre pour afficher le journal de l'exécution de cron
Instanciation de l'environnement de développement BOX créé précédemment
[Langage C] [Linux] Récupère la valeur de la variable d'environnement
Reliez la souris au gyroscope du Nintendo Switch Procon
Ssh dans un environnement virtuel avec vscode Remote Development
La musique de fond est automatiquement sélectionnée en fonction du contenu de la conversation
Unifier l'environnement de l'équipe de développement Python en commençant par Poetry
Avantages et inconvénients de la conversion de l'environnement de développement de Django en Docker
Point selon l'image
Hériter de la bibliothèque standard pour trouver la valeur moyenne de Queue
Maintenance de l'environnement de développement Django + MongoDB (en cours d'écriture)
Comment entrer dans l'environnement de développement Python avec Vagrant
django ne peut pas être installé dans l'environnement de développement de pipenv + pyenv
Changez le package à installer pour chaque environnement avec de la poésie
Développement LINEbot, je souhaite vérifier le fonctionnement dans l'environnement local
Comment trouver l'adresse mémoire de la valeur de la trame de données Pandas
Utilisation de TensorFlow dans l'environnement de développement intégré Cloud 9 - Principes d'utilisation -
Consigner périodiquement les valeurs des capteurs d'environnement Omron avec Raspberry Pi
Trouvez la définition de la valeur de errno
À propos de la valeur de retour de pthread_mutex_init ()
À propos de la valeur de retour de l'histogramme.
Mémo de configuration de l'environnement de développement Vim + Python
Vérification de l'environnement de développement NAOqi Python
Supplément à l'explication de vscode
Préparez l'environnement de développement avec anyenv
Utilisez Cloud Dataflow pour modifier dynamiquement la destination en fonction de la valeur des données et enregistrez-la dans GCS
[Gestion des erreurs Golang] La meilleure façon de diviser le traitement en fonction du type d'erreur
Comment changer facilement l'environnement virtuel créé par Conda sur Jupyter
J'ai mesuré 6 méthodes pour obtenir l'indice de la valeur maximale (valeur minimale) de la liste
Paramètre pour entrer le contenu de la bibliothèque avec pytest et effectuer un test de débogage
[Environnement de développement] Comment créer un ensemble de données proche de la base de données de production
Enregistrement des valeurs du capteur d'environnement Omron avec Raspberry Pi (type USB)
Changer le module à charger pour chaque environnement d'exécution en Python
J'ai essayé d'afficher la valeur d'altitude du DTM dans un graphique
L'histoire d'essayer de reconnecter le client
Ajout d'un environnement de développement local sur MacOS
Script pour changer la description de fasta
10 méthodes pour améliorer la précision de BERT
Comment vérifier la version de Django
L'histoire de la mise en place de MeCab dans Ubuntu 16.04
À propos de l'environnement virtuel de Python version 3.7
Comment préparer l'environnement de développement Python [Mac]
Créer un environnement d'exécution pour Jupyter Lab
Utilisez .flatten () [0] de numpy pour récupérer la valeur
Essayez de préparer chaque environnement de kivy
À propos de l'environnement de développement que vous utilisez
Préparer l'environnement de développement pour keyhac pour Mac
Obtenez la valeur de la couche intermédiaire de NN
Construction d'un environnement de développement pour l'atelier Choreonoid
L'histoire du changement de pep8 en pycodestyle
L'environnement de développement Python le plus puissant Recommandation de PyCharm
L'environnement de développement intégré Python le plus puissant PyCharm
Rendre la valeur par défaut de l'argument immuable
Comment sensibiliser VS Code à l'environnement venv et à ses avantages
Test de la différence entre les valeurs moyennes des données de comptage selon la distribution de Poisson