Outils pour utilisateurs

Outils du site


python:flask:configuration

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
python:flask:configuration [2021/09/02 04:45]
marclebrun
python:flask:configuration [2021/09/22 17:03] (Version actuelle)
Ligne 3: Ligne 3:
 Doc: [[https://​flask.palletsprojects.com/​en/​2.0.x/​config/​]] Doc: [[https://​flask.palletsprojects.com/​en/​2.0.x/​config/​]]
  
-===== Configurer son application ​=====+===== Structure du projet ​=====
  
-Juste après la création de l'​objet ​**app**, charger le contenu de +Les fichiers ​**.env** et **config.py** sont positionnées à la racine 
-l'un ou l'​autre fichier ​**.py** ​en fonction de l'​environnement ​:+du projet ​:
  
-<​code ​python+<​code>​ 
-app = Flask(__name__) +/​home/​marc/​flaskapp 
- +├── ​.env 
-if app.config['​env'] == '​development':​ +├── ​app 
-    app.config.from_object('​config_dev'​) +│   ​├── __init__.py 
- +│   ​└── ... 
-if app.config['​env'​] == '​production':​ +├── config.py 
-    app.config.from_object('​config_prod'​) ​   ​+└── ...
 </​code>​ </​code>​
  
-Les deux fichiers ​sont situés à la racine de l'​application.+:!: 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 :!:
  
-<code python config_prod.py>​ +===== Installation des dépendances =====
-import os+
  
-DEBUG = True+Pour charger le fichier **.env**, il faut que le module **python-dotenv** 
 +soit installé.
  
-BASE_DIR = os.path.abspath(os.path.dirname(__file__)) +<code bash> 
-DBPATH ​  = os.path.join(BASE_DIR, '​data/​example.db'​) +source venv/​bin/​activate 
- +(venv)$ pip install python-dotenv
-SECRET_KEY = "... clé secrète pour le développement ..."+
 </​code>​ </​code>​
  
-<code python config_dev.py> +===== Écrire le fichier ​.env =====
-import os+
  
-DEBUG = False+Contient la configuration de base de **Flask**
  
-BASE_DIR = os.path.abspath(os.path.dirname(__file__)) +En **développement** :
-DBPATH ​  = '/​var/​data/​production.db'​+
  
-SECRET_KEY ​"... clé secrète pour la production ..."+<code bash .env> 
 +FLASK_APP ​run.py 
 +FLASK_ENV = development 
 +DEBUG     = True
 </​code>​ </​code>​
  
-===== Utiliser un fichier .env =====+En **production** :
  
-Installer **python-dotenv** dans le Virtual Environment : +<code bash .env
- +FLASK_ENV = production 
-<code bash> +DEBUG     = False
-source venv/​bin/​activate +
-(venv)$ pip install python-dotenv+
 </​code>​ </​code>​
  
-Créer un fichier ​**.env** à la racine du projet :+===== Écrire le fichier ​config.py =====
  
-<​code>​ +C'est ici que je place toute la configuration spécifique à l'​application 
-/​home/​marc/​flaskapp +(qui n'est pas propre à Flask).
-├── app +
-│   ​├── __init__.py +
-│   ​└── ... +
-└── .env +
-</​code>​+
  
-:!: Le fichier **.env** doit être dans le **.gitignore** sinon il sera publié +<code python config.py> 
-sur GitHub en même temps que le code :!:+import os
  
-<code bash /​home/​marc/​flaskapp/​.env> +SECRET_KEY ​ = "...(clé secrète)..."​ 
-FLASK_ENV=development + 
-PGUSER=marc +BASE_DIR ​   ​os.path.abspath(os.path.dirname(__file__)) 
-PGPASSWORD=my_password+PATH_UPLOAD ​os.path.join(BASE_DIR,​ '​data/​upload/'​)
 </​code>​ </​code>​
  
-**Flask** va détecter ​la présence du fichier **.env** et charger +Pour générer ​la clé secrète, voir la page [[python:​generer_secret_key]]
-certaines valeurs depuis celui-ci (par exemple **FLASK_ENV**).+
  
-Pour le reste, charger les variables d'​environnement lors de +===== Lecture ​de la configuration =====
-l'​initialisation de l'​application :+
  
-<code python __init__.py> +Les valeurs lues par **Flask** depuis le fichier **.env** se trouvent déjà 
-import os +dans l'​objet **app.config**
-from flask import Flask, ​... +
-from dotenv import load_dotenv+
  
-...+Nous allons y intégrer les valeurs lues depuis le fichier **config.py** : 
 + 
 +<code python __init.py__> 
 +from flask import Flask
  
 app = Flask(__name__) app = Flask(__name__)
  
-base_dir = os.path.dirname(app.root_path) +# ceci va intégrer les valeurs de "​config.py" 
-load_dotenv(os.path.join(base_dir, ​'.env'))+app.config.from_object('config')
 </​code>​ </​code>​
  
-Ensuite il suffit de les utiliser dans le code de cette façon :+===== Accéder à la configuration =====
  
 <code python> <code python>
-import ​os+base_dir = app.config['​BASE_DIR'​] 
 +</​code>​ 
 + 
 +Depuis un Blueprint, utiliser l'​objet **current_app** : 
 + 
 +<code python>​ 
 +from flask import ​current_app
  
-username ​os.getenv('PGUSER'+base_dir ​current_app.config['BASE_DIR']
-password = os.getenv('​PGPASSWORD'​)+
 </​code>​ </​code>​
  
-===== Générer une Secret Key =====+===== Afficher le contenu de la configuration ​=====
  
-Voir la page [[python:generer_secret_key]]+Ceci sort la liste des valeurs vers la console:
  
 +<code python>
 +for item in app.config.items():​
 +    print("​%-30s => %s" % item)
 +</​code>​
  
python/flask/configuration.1630557914.txt.gz · Dernière modification: 2021/09/02 04:45 par marclebrun