DY

01 Découverte de Flask

Flask

Flask logo

Flask est un microframework pour Python basé sur Werkzeug, Jinja 2 et de bonnes intentions. Et avant de demander: c'est sous licence BSD!

Micro framework ?

Micro ne signifie pas que l'ensemble de votre application doit tenir au sein d'un fichier de code source unique ou encore que Flask est pauvre en fonctionnalités.

Le terme micro framework signifie que le coeur de Flask est et restera simple mais extensible.

Flask n'inclut pas de niveau d'abstraction pour les base de données, de validation de formulaire ou n'importe quels librairies existant déjà et faisant parfaitement le job.

A la place celui-ci permet l'ajout d'extension et donc de fonctionnalités. Il ne contient que le support des requêtes HTTP, le routing et le templating, tout le reste est à votre appréciation.

Convention

Python et Flask se basent sur la convention plutôt que la configuration, ainsi les templates et les fichiers statiques sont dans des sous-répertoires ayant respectivement pour noms templates et static.

Installation

Flask recommande désormais d'utiliser la dernière version de Python 3, il convient au minimum d'avoir la version 3.4 de Python.

Dépendances

Lors de l'installation de Flask les dépendances suivantes seront automatiquement installées:

Environnement virtuel

Nous l'avons déjà vu, il est conseillé d'utiliser un environnement virtuel Python pour gérer nos projets et leurs dépendances.

Pour créer l'environnement virtuel de notre projet:

mkdir meeple_street
cd meeple_street
pipenv --python 3

Puis pour installer Flask:

pipenv shell
pipenv install Flask

Démarrage rapide

Assez parler, il est temps de se mettre au développement.

Une application minimal
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

Mais que fait ce code ?

  1. D'abord on importe la classe Flask, une instance de cette classe sera notre application WSGI.
  2. Puis nous créeons une instance de cette classe en lui passant en argument le nom du module.
  3. Ensuite nous utilisons le décorateur route() pour informer Flask que telle url doit invoquer telle fonction.
  4. Enfin nous créeons la fonction hello_world qui correspondera automatiquement à la route nommée hello_world.
Lancement du serveur de développement
  1. Sauvegardez le code précédent dans un fichier app.py à la racine de votre projet,
  2. Lancez le serveur de développement via la commande suivante: flask run
  3. Rendez vous sur 127.0.0.1:5000

Félicitations ! Vous venez de créer votre première application Flask !

Routing

Les applications Web modernes utilisent des URL significatives pour faciliter la vie des utilisateurs. Les utilisateurs sont plus susceptibles d'aimer une page et de revenir si la page utilise une URL explicite dont ils peuvent se souvenir.

Utilisez le décorateur route() pour lier une fonction à une URL.

@app.route('/')
def index():
    return 'Index Page'

@app.route('/hello')
def hello():
    return 'Hello, World'
Règles variables

Vous pouvez ajouter des sections variables à une URL en les marquant avec <nom_variable>. Votre fonction reçoit alors la variable <nom_variable> en tant qu'argument. Vous pouvez éventuellement utiliser un convertisseur pour spécifier le type de l'argument tel que <convertisseur: nom_variable>.

@app.route('/say_hello/<name>')
def say_hello(name):
    return "Hello %s" % name

@app.route('/multiply/<int:facteur_gauche>/<int:facteur_droite>')
def multiply(facteur_gauche, facteur_droite):
    return facteur_gauche * facteur_droite

Voici les types de convertisseurs (extrait de la documentation de flask):

string (default) accepts any text without a slash
int accepts positive integers
float accepts positive floating point values
path like string but also accepts slashes
uuid accepts UUID strings
À vous de jouer
  1. Créer une route / (index) qui affiche 'Jurassic Park index',
  2. Créer une route /say_hello/Ben qui affiche 'Hello Ben' (Ben étant un paramétre passé via l'url),
  3. Créer une route pour effectuer les 4 opérations arithmétique simple (division, soustraction, multiplication, addition).