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 %}

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)

Les 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é.

autres extensions