Flask est un micro-framework Python conçu pour faciliter le développemant d'applications web. Contrairement à des frameworks plus lourds, Flask reste léger et modulable, ce qui en fait un excellent choix pour les API et les prototypes rapides.
- Installation du framework
Pour commencer avec Flask, l'installation se fait via le gestionnaire de paquets de Python :
pip install flask
- Création d'une application minimale
Voici la structure de base d'un serveur web avec Flask :
from flask import Flask
# Initialisation de l'application
app_web = Flask(__name__)
@app_web.route('/')
def accueil():
return 'Serveur Flask opérationnel !'
if __name__ == '__main__':
app_web.run(host='127.0.0.1', port=5000, debug=True)
Dans cet exemple :
- L'instance
Flask(__name__)sert d'application WSGI. - Le décorateur
@app_web.route('/')lie l'URL racine à la fonction qui suit. - Le mode
debug=Truepermet de recharger automatiquement le serveur lors d'une modification du code.
- Gestion du routage et paramètres dynamiques
Flask permet de capturer des segments de l'URL pour les utiliser comme arguments dans vos fonctions.
@app_web.route('/profil/<pseudo>')
def afficher_profil(pseudo):
return f"Bienvenue sur le profil de {pseudo}"
@app_web.route('/commande/<int:id_commande>')
def details_commande(id_commande):
return f"Consultation de la commande n°{id_commande}"
Les convertisseurs disponibles incluent int, float et path (pour les chaînes contenant des slashs).
Règles sur les barres obliques (Slashes)
Flask traite différemment les routes selon la présence d'un slash final :
/projets/: Si vous accédez à/projets, Flask redirige automatiquement vers l'URL avec le slash./apropos: L'accès à/apropos/provoquera une erreur 404, car l'URL est traitée comme un fichier unique.
- Construction d'URLs et Redirections
Pour éviter de coder les URLs en dur, on utilise url_for. Cela facilite la maintenance si les routes changent.
from flask import redirect, url_for
@app_web.route('/admin')
def zone_privee():
return "Espace Administration"
@app_web.route('/verification/<utilisateur>')
def verifier_acces(utilisateur):
if utilisateur == 'admin':
return redirect(url_for('zone_privee'))
else:
return f"Accès refusé pour {utilisateur}"
- Manipulation des méthodes HTTP
Par défaut, une route n'accepte que les requêtes GET. Pour traiter des formulaires, il faut spécifier la méthode POST.
from flask import request
@app_web.route('/authentification', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
user = request.form.get('username')
return f"Utilisateur {user} connecté."
return '''
<form method="post">
Nom: <input type="text" name="username">
<input type="submit" value="Valider">
</form>
'''
- Moteur de templates Jinja2
Flask utilise Jinja2 pour séparer la logique métier de la présentation. Les fichiers HTML doivent être placés dans un dossier nommé templates.
from flask import render_template
@app_web.route('/dashboard')
def console():
stats = {'utilisateurs': 120, 'visites': 4500}
options = ['Graphiques', 'Logs', 'Paramètres']
return render_template('tableau.html', data=stats, menu=options)
Exemple de syntaxe dans le fichier tableau.html :
<h1>Statistiques</h1>
<p>Visites : {{ data.visites }}</p>
<ul>
{% for item in menu %}
<li>{{ item }}</li>
{% endfor %}
</ul>
- Fichiers Statiques
Les fichiers CSS, JavaScript et les images sont stockés dans un répertoire nommé static. On les lie dans le HTML via url_for :
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
<script src="{{ url_for('static', filename='interactif.js') }}"></script>
- L'objet Request
L'objet request permet d'extraire toutes les informations envoyées par le client :
request.form: Données issues d'un formulaire POST.request.args: Paramètres de la requête dans l'URL (ex: ?id=10).request.files: Fichiers téléchargés.request.cookies: Lecture des cookies.
@app_web.route('/recherche')
def chercher():
mot_cle = request.args.get('q', '')
return f"Résultats pour la recherche : {mot_cle}"