Configuration de l’application¶
Une application Flask est une instance de la classe Flask
. Tout ce qui concerne cette application, que ce soit sa configuration ou ses URLs, sera enregistré dans cette classe.
La façon la plus simple de créer une application Flask est de créer une instance de la classe Flask
globale, directement au début de votre code, comme l’exemple « Hello, World! » sur la page précédente. Bien que cette approche soit simple et utile dans certains cas, elle peut causer des soucis lorsque le projet grandit.
Au lieu de créer un instance globale de la classe Flask
, vous allez la créer dans une fonction. Cette fonction est généralement appelée l’usine à applications (application factory en anglais). Toutes les opérations liées à la configuration de l’application doivent se faire dans cette fonction qui retourne l’application.
L’Usine à Applications¶
Il est temps de commencer à coder. Créez le répertoire flaskr
et ajoutez-y le fichier __init__.py
. Le fichier __init__.py
a deux rôles. Tout d’abord, il contient l’usine à applications. Depuis, il indique à Python que le répertoire flaskr
doit être considéré comme étant un package.
$ mkdir flaskr
import os
from flask import Flask
def create_app(test_config=None):
# create and configure the app
app = Flask(__name__, instance_relative_config=True)
app.config.from_mapping(
SECRET_KEY='dev',
DATABASE=os.path.join(app.instance_path, 'flaskr.sqlite'),
)
if test_config is None:
# load the instance config, if it exists, when not testing
app.config.from_pyfile('config.py', silent=True)
else:
# load the test config if passed in
app.config.from_mapping(test_config)
# ensure the instance folder exists
try:
os.makedirs(app.instance_path)
except OSError:
pass
# a simple page that says hello
@app.route('/hello')
def hello():
return 'Hello, World!'
return app
create_app
est la fonction contenant l’usine à applications. Vous la compléterez plus tard dans ce tutoriel, mais elle réalise déjà beaucoup d’opérations.
app = Flask(__name__, instance_relative_config=True)
crée une instance de la classeFlask
.__name__
est le nom du module Python courant. L’application doit connaître l’endroit où est elle installée pour configurer certains chemins et__name__
est une solution classique pour obtenir cette information.instance_relative_config=True
indique à l’application que les fichiers de configuration sont relatifs au répertoire instance folder. Ce répertoire est localisé en dehors du packageflaskr
et peut contenir des données locales qui ne doivent pas être intégrées au contrôle de version, comme les secrets utilisés dans la configuration et le fichier contenant la base de données.
app.config.from_mapping()
spécifie plusieurs paramètres par défaut que l’application va utiliser:SECRET_KEY
est utilisé par Flask et des extensions pour stocker de données de façon sûre. Il est initialisé à la valeur'dev'
qui est une valeur facile pendant le développement de l’application, mais doit être remplacé par une valeur aléatoire lorsque celle-ci est mise en production.DATABASE
est le chemin où le fichier contenant la base de données SQLite sera sauvegardé. Le préfixe de ce fichier estapp.instance_path
, c’est-à-dire le chemin choisi par Flask comme instance folder. Vous en apprendrez plus sur la base de données dans la section suivante.
app.config.from_pyfile()
remplace le configuration par défaut avec des paramètres spécifiés dans le fichierconfig.py
qui se trouve dans l”instance folder si celui-ci exite. Par exemple, en production, cela peut être utilisé pour fixer uneSECRET_KEY
vraiment secrète.La paramètre
test_config
peut aussi être passé à l’usine à applications. Dans ce cas, il sera utilisé à la place de la configuration de l’instance. Cela vous permettra de spécifier des paramètres pour vos test qui sont indépendants de ceux que vous utilisez durant le développement de l’application.
os.makedirs()
vérifie que le cheminapp.instance_path
existe. Flask ne créer pas l’instance folder automatiquement, mais celui-ci doit être créé car votre projet cherhera à y créer le fichier contenant sa base de données SQLite.@app.route()
crée une route simple de façon à vous permettre de voir l’application fonctionner avant de faire l’entièreté du tutoriel. Elle relie l’URL/hello
à une fonction qui retourne une réponse, dans ce cas la chaîne de caractères'Hello, World!'
.
Lancer l’application¶
Vous pouvez maintenant lancer votre application en utilisant la commande flask
. Depuis le terminal, indiquez à Flask où trouver l’application et ensuite lancez-le en mode dévelopemment. N’oubliez pas de vous placer d’abord dans le répertoire flask-tutorial
et non dans le package flaskr
.
Le mode développement lance automatiquement un débuger interactif lorsqu’une page lance une exception et relance le serveur chaque fois que vous modifiez votre code. Vous pouvez le laisser fonctionner et devez juste recharger la page dans votre navigateur au fur et à mesure de votre progression dans le tutoriel.
Pour Linux et Mac:
$ export FLASK_APP=flaskr
$ export FLASK_ENV=development
$ flask run
Pour Windows via l’invite de commandes, utilisez set
au lieu de export
:
> set FLASK_APP=flaskr
> set FLASK_ENV=development
> flask run
Pour Windows Powershell, utilisez $env:
au lieu de export
:
> $env:FLASK_APP = "flaskr"
> $env:FLASK_ENV = "development"
> flask run
Vous devrie observer une sortie équivalente au texte ci-dessous sur la sortie standard:
* Serving Flask app "flaskr"
* Environment: development
* Debug mode: on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 855-212-761
Vous pouvez maintenant visiter l’URL http://127.0.0.1:5000/hello dans un navigateur et vous devriez voir le message « Hello, World! ». Félicitations, vous exécutez maintenant votre première application web en Flask!
Continuez en lisant le document Construire et accéder à la base de données.