API des messages flash de Flask
Le mécanisme Flash est utilisé pour afficher un message de retour unique lors de la prochaine requête, un scénario typique étant les notifications « opération réussie » ou « erreur de saisie ».
Flask stocke les messages dans la session et les efface automatiquement après leur lecture.
fonction flash
| Paramètre | Type | Valeur par défaut | Description |
|---|---|---|---|
| message | str | Requis | Le texte du message à afficher |
| category | str | "message" | Catégories de messages, valeurs recommandées : message, success, error, warning, info |
fonction get_flashed_messages
| Paramètre | Type | Valeur par défaut | Description |
|---|---|---|---|
| with_categories | bool | False | Lorsque True, renvoie une liste de tuples (category, message) |
| category_filter | itérable | () | Ne renvoyer que les messages de la catégorie spécifiée |
| Valeur de retour | Description |
|---|---|
| with_categories=False | Renvoie une liste de textes de messages : ["msg1", "msg2"] |
| with_categories=True | Renvoie une liste de tuples (category, message) : [("success", "msg1"), ("error", "msg2")] |
Utilisation dans les templates
get_flashed_messages()On peut les appeler directement dans le template sans avoir besoin de les passer via render_template.
Exemple
<!-- Afficher tous les messages flash -->
{% with messages = get_flashed_messages(with_categories=true) %}
{% if messages %}
{% for category, message in messages %}
<div class="flash-{{ category }}">{{ message }}</div>
{% endfor %}
{% endif %}
{% endwith %}
<!-- Afficher uniquement les messages d'erreur -->
{% for msg in get_flashed_messages(category_filter=["error"]) %}
<div class="error">{{ msg }}</div>
{% endfor %}
{% with messages = get_flashed_messages(with_categories=true) %}
{% if messages %}
{% for category, message in messages %}
<div class="flash-{{ category }}">{{ message }}</div>
{% endfor %}
{% endif %}
{% endwith %}
<!-- Afficher uniquement les messages d'erreur -->
{% for msg in get_flashed_messages(category_filter=["error"]) %}
<div class="error">{{ msg }}</div>
{% endfor %}
Exemples de code
Exemple
from flask import Flask, flash, get_flashed_messages, redirect, url_for, request
app = Flask(__name__)
app.secret_key = "secret"
@app.route("/post", methods=["GET", "POST"])
def create_post():
if request.method == "POST":
title = request.form.get("title", "").strip()
if not title:
flash("Le titre ne peut pas être vide", "error")
else:
flash(f"L'article '{title}' a été publié avec succès !", "success")
return redirect(url_for("create_post"))
return redirect(url_for("create_post"))
# Requête GET : récupérer et afficher tous les messages
messages = get_flashed_messages(with_categories=True)
return render_template("post.html", messages=messages)
app = Flask(__name__)
app.secret_key = "secret"
@app.route("/post", methods=["GET", "POST"])
def create_post():
if request.method == "POST":
title = request.form.get("title", "").strip()
if not title:
flash("Le titre ne peut pas être vide", "error")
else:
flash(f"L'article '{title}' a été publié avec succès !", "success")
return redirect(url_for("create_post"))
return redirect(url_for("create_post"))
# Requête GET : récupérer et afficher tous les messages
messages = get_flashed_messages(with_categories=True)
return render_template("post.html", messages=messages)
autres extensionsLes messages flash sont stockés dans la Session, donc la clé secrète doit être définieSECRET_KEY. Le message n'est visible que dans la requête suivante après sa lecture, puis il est automatiquement effacé.