Découvrir Flask
Sommaire
Dans ce TP nous allons découvrir Flask (l’installation et un premier test).
Introduction
Flask est un framework open-source de développement web en Python. Son but principal est d'être léger, afin de garder la souplesse de la programmation Python, associée à un système de templates.
Installation de Python
L’installation de Python sous Windows se fait via l’installeur officiel, nous allons prendre la version 3.
Sous Linux (et macOS) Python est normalement inclus.
Installation de PIP
Pip est « le gestionnaire de paquets » de Python. PIP (Pip Installs Packages) va nous permettre d’installer les différentes librairies dont nous allons avoir besoin (virtualenv, flask, …).
Python 3
Bonne nouvelle ! Depuis Python 3.4, pip est intégré à l’installation de Python. Rien à installer de plus.
Python 2
Normalement vous avez installé Python 3, vous n’avez donc pas à faire ceci. Cependant, dans votre vie vous rencontrerez peut-être des environnements Python 2. La procédure d’installation est la suivante :
- Télécharger sur votre machine le script suivant
- Lancer dans une console administrateur :
python get-pip.py
Et voilà ! pip est installé sur votre machine !
Question :
- Avez-vous ouvert le fichier avant de l’utiliser ?
Création du virtualenv
VirtualEnv ? Kézako ! C’est l’un des petits trucs géniaux avec Python ! VirtualEnv vous permet d’avoir des environnements cloisonnés pour chacun de vos projets. Ça va vous permettre par exemple d’installer une version différente de Flask pour des projets différents, ou d’avoir des librairies « A » uniquement dans votre projet « A ». Bref, ça permet de faire les choses proprement.
Vu que c’est la première fois que vous configurez votre environnement, nous allons installer virtualenv. Dans une console administrateur, lancez la commande suivante :
python -m pip install virtualenvMaintenant que pip est installé vous allez pouvoir créer votre virtualenv :
$ virtualenv -p python3 flask
Running virtualenv with interpreter /usr/local/bin/python3
Using base prefix '/usr/local/Cellar/python3/3.6.4_1/Frameworks/Python.framework/Versions/3.6'
New python executable in /private/tmp/flask/bin/python3.6
Also creating executable in /private/tmp/flask/bin/python
Installing setuptools, pip, wheel...done.Voilà notre environnement cloisonné est prêt, mais pour l’instant il n’est pas actif, il faut lancer une commande pour « entrer » dedans :
Sous Windows :
$ flask\Scripts\activate
(flask) C:\Users\user\Documents>Sous Unix :
$ source flask/bin/activate
(flask) /tmpLe (flask) entre parenthèses vous indique que vous êtes actuellement dans un environnement cloisonné, à partir de maintenant si vous installez des paquets via pip ils s’installeront non pas dans votre système, mais dans votre environnement « cloisonné ».
Le fameux Hello World
Testons notre installation en réalisant un simple Hello World. Créez un fichier test.py avec le contenu suivant :
print ("Hello World")Lancez-le via la commande :
python test.pyQuestions :
- Modifier le script pour afficher 4 fois le hello world. (Plusieurs solutions…)
- Modifier le texte affiché.
Le Hello World++
Maintenant que l’on sait que notre environnement d’exécution est correctement installé, nous allons tester la partie Flask. Avec la commande pip, installez Flask, mais avant, pensez à activer votre environnement cloisonné précédemment créé :
flask\Scripts\activate # Sous Windows
source flask/bin/activate # Sous UnixInstallation de Flask :
python -m pip install flaskCette commande va installer Flask ainsi que les dépendances nécessaires à son fonctionnement.
Le code
Maintenant que Flask est installé nous allons pouvoir l’utiliser. Notre exemple sera tout simple : tout sera contenu dans un seul fichier. Lancez un éditeur de texte (PyCharm, Visual Studio Code, etc.) et commencez par créer le fichier main.py.
Le fichier main.py va être le fichier principal de notre application, l’ensemble du code sera dedans. C’est bien pour une démo, mais bien évidemment dans une vraie application on évitera.
But de notre code
Dans ce second exemple appelé Hello World++ nous allons créer deux fonctions Python :
- La première
hello_world()qui afficheraBonjour Monde. - Et la seconde
hello(name)qui afficheraBonjour <nom>.
Fonctionnement
Rappel sur le fonctionnement de Flask : comme vu pendant le cours, Flask permet de « mapper » (faire correspondre) des URL et des fonctions Python. Nous devons donc définir des URL d’accès à hello_world et hello, je vous propose :
/==>hello_world()./hello/<name>==>hello(name).
Associer un lien et une fonction
En Python, on utilise beaucoup de « décorateurs ». Un décorateur est un « morceau de code » qui sera appelé avant, après, ou à l’initialisation de votre code.
Flask apporte un décorateur @app.route, celui-ci nous permet de déclarer de nouveaux chemins (routes) pour accéder à nos API. Exemple :
[…]
@app.route("/")
def hello_world():
pass
[…]Ce morceau de code déclare donc une URL / et appellera la fonction hello_world() à chaque fois qu’une personne y accèdera.
L’application
Maintenant que nous avons défini dans notre tête la structure de notre application, écrivons le code :
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_world():
return "Bonjour Monde!"
@app.route("/hello/<name>")
def hello(name):
return "Bonjour {}".format(name)
# Lancement de l'application
if __name__ == '__main__':
app.debug = True
app.run()Le test
Testez votre application en la lançant. Pour ça vous devez activer le virtualenv puis lancer :
(flask) tp1 ツ python main.py
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)Normalement votre code est maintenant accessible, testez le fonctionnement :
Question :
- Changer le paramètre et observer le résultat.
Évolution
Maintenant que vous avez tout compris, je vous propose de mettre en place une nouvelle fonctionnalité :
Ajouter une fonction à votre application qui va effectuer une addition entre deux nombres passés en paramètre.
Étapes :
- Définir l’URL.
- Définir le nom de la fonction.
- Écrire le code.
- Tester.
C’est à vous !
Voir l'une des solutions possibles
@app.route("/calcul/<int:a>/<int:b>")
def calcul(a, b):
return "{}".format(a + b)Psst : maintenant que vous avez vu la solution, modifiez la consigne pour effectuer une division plutôt…