Flask Message Flashing API

El mecanismo de mensajes flash se utiliza para mostrar mensajes de retroalimentación únicos en la siguiente solicitud. Un caso típico son los avisos de «operación exitosa» o «error de entrada».

Flask almacena los mensajes en la sesión y los elimina automáticamente después de leerlos.


función flash

Parámetros Tipo Valor predeterminado Descripción
message str Obligatorio Texto del mensaje a mostrar
category str "message" Categoría del mensaje. Valores recomendados: message, success, error, warning, info

función get_flashed_messages

Parámetros Tipo Valor predeterminado Descripción
with_categories bool False Cuando es True, devuelve una lista de tuplas (category, message)
category_filter iterable () Devuelve solo los mensajes de la categoría especificada
Valor de retorno Descripción
with_categories=False Devuelve una lista de textos de mensajes: ["msg1", "msg2"]
with_categories=True Devuelve una lista de tuplas categoría + mensaje: [("success", "msg1"), ("error", "msg2")]

Uso en plantillas

get_flashed_messages()Se puede llamar directamente en la plantilla, sin necesidad de pasarlo a través de render_template.

Ejemplo

<!-- Muestra todos los mensajes 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 %}

<!-- Muestra solo los mensajes de error -->
{% for msg in get_flashed_messages(category_filter=["error"]) %}
    <div class="error">{{ msg }}</div>
{% endfor %}

Ejemplo de código

Ejemplo

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("El título no puede estar vacío", "error")
        else:
            flash(f"¡El artículo «{title}» se publicó correctamente!", "success")
            return redirect(url_for("create_post"))
        return redirect(url_for("create_post"))
    # Solicitud GET: obtener y mostrar todos los mensajes
    messages = get_flashed_messages(with_categories=True)
    return render_template("post.html", messages=messages)

Los mensajes flash se almacenan en la sesión, por lo tanto se debe configurarSECRET_KEYEl mensaje solo es visible en la siguiente solicitud en la que se lee y se elimina automáticamente después.

Otras extensiones