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:28]
marclebrun [Écrire le fichier .env]
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 36: Ligne 37:
 En **développement** : En **développement** :
  
-<​code>​+<​code ​bash .env>
 FLASK_APP = run.py FLASK_APP = run.py
 FLASK_ENV = development FLASK_ENV = development
- +DEBUG     ​= True
-DEBUG   ​= True +
-SECRET_KEY = "​...(générer une clé secrète)..."​+
 </​code>​ </​code>​
  
 En **production** : En **production** :
  
-<​code>​+<​code ​bash .env>
 FLASK_ENV = production FLASK_ENV = production
- +DEBUG     ​= False
-DEBUG      = False +
-SECRET_KEY = "​...(générer une 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 =====
  
 +C'est ici que je place toute la configuration spécifique à l'​application
 +(qui n'est pas propre à Flask).
  
- +<code python config.py>​
- +
- +
- +
- +
- +
-====== Restes de l'​ancienne page : ====== +
- +
-===== 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__) +
- +
-if app.config['​env'​] == '​development':​ +
-    app.config.from_object('​config_dev'​) +
- +
-if app.config['​env'​] == '​production':​ +
-    app.config.from_object('​config_prod'​) ​    +
-</​code>​ +
- +
-Les deux fichiers sont situés à la racine de l'​application. +
- +
-<code python config_prod.py>+
 import os import os
  
-DEBUG True+SECRET_KEY  ​"​...(clé secrète)..."​
  
-BASE_DIR = os.path.abspath(os.path.dirname(__file__)) +BASE_DIR ​   = os.path.abspath(os.path.dirname(__file__)) 
-DBPATH ​  = os.path.join(BASE_DIR,​ 'data/example.db') +PATH_UPLOAD ​= os.path.join(BASE_DIR,​ 'data/upload/')
- +
-SECRET_KEY = "... clé secrète pour le développement ..."+
 </​code>​ </​code>​
  
-<​code ​python ​config_dev.py>​ +Pour générer la clé secrète, voir la page [[python:​generer_secret_key]]
-import os+
  
-DEBUG False+===== Lecture de la configuration =====
  
-BASE_DIR = os.path.abspath(os.path.dirname(__file__)) +Les valeurs lues par **Flask** depuis le fichier **.env** se trouvent déjà 
-DBPATH ​  ​= ​'/​var/​data/​production.db'+dans l'objet **app.config**
  
-SECRET_KEY = "... clé secrète pour la production ..." +Nous allons y intégrer les valeurs lues depuis le fichier **config.py** :
-</​code>​+
  
-===== Utiliser un fichier ​.env =====+<code python __init.py__> 
 +from flask import Flask
  
-Installer **python-dotenv** dans le Virtual Environment :+app = Flask(__name__)
  
-<code bash> +# ceci va intégrer les valeurs de "​config.py"​ 
-source venv/​bin/​activate +app.config.from_object('​config'​)
-(venv)$ pip install python-dotenv+
 </​code>​ </​code>​
  
-Créer un fichier **.env** ​à la racine du projet :+===== Accéder ​à la configuration =====
  
-<​code>​ +<​code ​python
-/​home/​marc/​flaskapp +base_dir = app.config['​BASE_DIR'​]
-├── ​app +
-│   ​├── __init__.py +
-│   ​└── ... +
-└── ​.env+
 </​code>​ </​code>​
  
-:!: Le fichier ​**.env** doit être dans le **.gitignore** sinon il sera publié +Depuis un Blueprint, utiliser l'​objet ​**current_app** :
-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 169: 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.1631597317.txt.gz · Dernière modification: 2021/09/14 05:28 (modification externe)