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/14 05:31]
marclebrun
python:flask:configuration [2021/09/22 17:03] (Version actuelle)
Ligne 27: Ligne 27:
  
 <code bash> <code bash>
-pip install python-dotenv+source venv/​bin/​activate 
 +(venv)$ ​pip install python-dotenv
 </​code>​ </​code>​
  
Ligne 39: Ligne 40:
 FLASK_APP = run.py FLASK_APP = run.py
 FLASK_ENV = development FLASK_ENV = development
- +DEBUG     ​= True
-DEBUG   ​= True +
-SECRET_KEY = "​...(clé secrète)..."​+
 </​code>​ </​code>​
  
Ligne 48: Ligne 47:
 <code bash .env> <code bash .env>
 FLASK_ENV = production FLASK_ENV = production
- +DEBUG     ​= False
-DEBUG      = False +
-SECRET_KEY = "​...(clé secrète)..."​+
 </​code>​ </​code>​
- 
-Pour générer la clé secrète, voir la page [[python:​generer_secret_key]] 
  
 ===== Écrire le fichier config.py ===== ===== Écrire le fichier config.py =====
Ligne 62: Ligne 57:
 <code python config.py>​ <code python config.py>​
 import os import os
 +
 +SECRET_KEY ​ = "​...(clé secrète)..."​
  
 BASE_DIR ​   = os.path.abspath(os.path.dirname(__file__)) BASE_DIR ​   = os.path.abspath(os.path.dirname(__file__))
Ligne 67: Ligne 64:
 </​code>​ </​code>​
  
 +Pour générer la clé secrète, voir la page [[python:​generer_secret_key]]
  
 +===== 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** :
  
-====== Restes de l'​ancienne page : ======+<code python __init.py__>​ 
 +from flask import Flask
  
-===== Configurer son application ===== 
- 
-Juste après la création de l'​objet **app**, charger le contenu de 
-l'un ou l'​autre fichier **.py** en fonction de l'​environnement : 
- 
-<code python> 
 app = Flask(__name__) app = Flask(__name__)
  
-if app.config['​env'​] == '​development':​ +# ceci va intégrer les valeurs de "​config.py" 
-    app.config.from_object('​config_dev'​) +app.config.from_object('​config'​)
- +
-if app.config['​env'​] == '​production':​ +
-    app.config.from_object('​config_prod'​) ​   +
 </​code>​ </​code>​
  
-Les deux fichiers sont situés ​à la racine de l'​application.+===== Accéder ​à la configuration =====
  
-<code python ​config_prod.py+<code python>​ 
-import os +base_dir ​app.config['​BASE_DIR'​]
- +
-DEBUG True +
- +
-BASE_DIR = os.path.abspath(os.path.dirname(__file__)) +
-DBPATH ​  = os.path.join(BASE_DIR'data/​example.db'​) +
- +
-SECRET_KEY = "... clé secrète pour le développement ..."+
 </​code>​ </​code>​
  
-<code python config_dev.py>​ +Depuis un Blueprint, utiliser l'objet **current_app** :
-import os +
- +
-DEBUG = False +
- +
-BASE_DIR = os.path.abspath(os.path.dirname(__file__)) +
-DBPATH ​  ​= ​'/​var/​data/​production.db'​ +
- +
-SECRET_KEY = "... clé secrète pour la production ..." +
-</​code>​ +
- +
-===== Utiliser un fichier .env ===== +
- +
-Installer ​**python-dotenv** dans le Virtual Environment : +
- +
-<code bash> +
-source venv/​bin/​activate +
-(venv)$ pip install python-dotenv +
-</​code>​ +
- +
-Créer un fichier **.env** à la racine du projet : +
- +
-<​code>​ +
-/​home/​marc/​flaskapp +
-├── app +
-│   ​├── __init__.py +
-│   ​└── ... +
-└── .env +
-</​code>​ +
- +
-:!: Le fichier **.env** doit être dans le **.gitignore** sinon il sera publié +
-sur GitHub en même temps que le code :!: +
- +
-<code bash /​home/​marc/​flaskapp/​.env>​ +
-FLASK_ENV=development +
-PGUSER=marc +
-PGPASSWORD=my_password +
-</​code>​ +
- +
-**Flask** va détecter la présence du fichier **.env** et charger +
-certaines valeurs depuis celui-ci (par exemple **FLASK_ENV**). +
- +
-Pour le reste, charger les variables d'​environnement lors de +
-l'​initialisation de l'​application : +
- +
-<code python __init__.py>​ +
-import os +
-from flask import Flask, ... +
-from dotenv import load_dotenv +
- +
-... +
- +
-app = Flask(__name__) +
- +
-base_dir = os.path.dirname(app.root_path) +
-load_dotenv(os.path.join(base_dir,​ '​.env'​)) +
-</​code>​ +
- +
-Ensuite il suffit de les utiliser dans le code de cette façon ​:+
  
 <code python> <code python>
-import ​os+from flask import ​current_app
  
-username ​os.getenv('PGUSER'+base_dir ​current_app.config['BASE_DIR']
-password = os.getenv('​PGPASSWORD'​)+
 </​code>​ </​code>​
- 
- 
  
 ===== Afficher le contenu de la configuration ===== ===== Afficher le contenu de la configuration =====
Ligne 178: Ligne 104:
     print("​%-30s => %s" % item)     print("​%-30s => %s" % item)
 </​code>​ </​code>​
- 
-===== Accéder à la config depuis un Blueprint ===== 
- 
-Utiliser **current_app** : 
- 
-<code python> 
-from flask import current_app 
- 
-x = current_app.config['​...'​] 
-</​code>​ 
- 
  
python/flask/configuration.1631597475.txt.gz · Dernière modification: 2021/09/14 05:31 (modification externe)