Outils pour utilisateurs

Outils du site


Panneau latéral

Plan du Site:

python:flask:configuration

Ceci est une ancienne révision du document !


Configuration

Structure du projet

Les fichiers .env et config.py sont positionnées à la racine du projet :

/home/marc/flaskapp
├── .env
├── app
│   ├── __init__.py
│   └── ...
├── config.py
└── ...

:!: Les fichiers .env et config.py doivent être dans le .gitignore sinon ils seront publiés sur le dépôt en même temps que le code :!:

Installation des dépendances

Pour charger le fichier .env, il faut que le module python-dotenv soit installé.

source venv/bin/activate
(venv)$ pip install python-dotenv

Écrire le fichier .env

Contient la configuration de base de Flask

En développement :

.env
FLASK_APP = run.py
FLASK_ENV = development
 
DEBUG   = True
SECRET_KEY = "...(clé secrète)..."

En production :

.env
FLASK_ENV = production
 
DEBUG      = False
SECRET_KEY = "...(clé secrète)..."

Pour générer la clé secrète, voir la page Générer une Secret Key

Écrire le fichier config.py

C'est ici que je place toute la configuration spécifique à l'application (qui n'est pas propre à Flask).

config.py
import os
 
BASE_DIR    = os.path.abspath(os.path.dirname(__file__))
PATH_UPLOAD = os.path.join(BASE_DIR, 'data/upload/')

Lecture de la configuration

Les valeurs lues par Flask depuis le fichier .env se trouvent déjà dans l'objet app.config

Nous allons y intégrer les valeurs lues depuis le fichier config.py :

__init.py__
from flask import Flask
 
app = Flask(__name__)
 
# ceci va intégrer les valeurs de "config.py"
app.config.from_object('config')

Accéder à la configuration

base_dir = app.config['BASE_DIR']

Depuis un Blueprint, utiliser l'objet current_app :

from flask import current_app
 
base_dir = current_app.config['BASE_DIR']

Afficher le contenu de la configuration

Ceci sort la liste des valeurs vers la console:

for item in app.config.items():
    print("%-30s => %s" % item)
python/flask/configuration.1631597886.txt.gz · Dernière modification: 2021/09/14 05:38 par marclebrun