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 %}
{% 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)
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)
Otras extensionesLos 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.