- ¿Qué son los mensajes Flash?
- ¿Cómo funcionan en Flask?
- ¿Qué categorías de mensajes Flash existen?
- Múltiples mensajes
- ¿Dónde se guardan los mensajes?
- Código completo de ejemplo
Seguro has visto mensajes como:
✅ ¡Te registraste con éxito!
❌ Ocurrió un error, intenta de nuevo
Esos son los mensajes Flash. Hoy aprenderás cómo funcionan y cómo usarlos en Flask para mejorar la experiencia de tus usuarios.
¿Qué son los mensajes Flash?
Lo especial de estos mensajes es que:
💬 Solo aparecen una vez: justo después de la acción.
💬 Se guardan temporalmente usando sesiones (una característica de Flask que permite “recordar” información entre peticiones del mismo usuario).
💬 No necesitas eliminarlos manualmente. Flask lo hace por ti.
¿Cómo funcionan en Flask?
Flask tiene soporte incorporado para trabajar con mensajes Flash. Para usarlos, primero debes importar la función flash:
from flask import flash
Pero también vamos a utilizar otras funciones y objetos útiles:
from flask import Flask, flash, redirect, get_flashed_messages, render_template
Paso 1: Configurar la aplicación
Tenemos que definir una clave secreta (secret key) en Flask para poder usar sesiones. Es un requisito de Flask para que funcione correctamente el almacenamiento temporal de datos entre solicitudes.
app = Flask(__name__)
app.secret_key = "clave_secreta"
Una clave secreta puede ser cualquier cadena, pero en ambiente de producción debe mantenerse privada y segura.
Paso 2: Crear una ruta donde se genera el mensaje Flash
Imagina que el usuario hace algo y queremos mostrarle un mensaje después. Usamos la función flash para guardar ese mensaje, pero recuerda: el mensaje se mostrará en la siguiente solicitud.
@app.post('/foo')
def foo_post():
# Guardamos un mensaje flash para la próxima pantalla
flash('Acción realizada con éxito', 'success') # 'success' es la categoría del mensaje
return redirect('/bar') # Redirigimos al usuario a otra página
👉 Nota: En este ejemplo, usamos el método POST para simular un formulario enviado.
Paso 3: Mostrar el mensaje Flash
Una vez que redirigimos al usuario a otra ruta (en este caso, /bar), extraemos los mensajes con get_flashed_messages:
@app.get('/bar')
def bar_index():
messages = get_flashed_messages(with_categories=True)
return render_template('bar.html', messages=messages)
Y en la plantilla HTML (templates/bar.html):
<!-- templates/bar.html -->
{% if messages %}
<ul class="flashes">
{% for category, message in messages %}
<li class="{{ category }}">{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
Como usas with_categories=True, cada mensaje se recibe como una tupla con la categoría (por ejemplo 'success') y el texto del mensaje. Esto se puede aprovechar para darle estilos diferentes en el HTML.
¿Qué categorías de mensajes Flash existen?
Los frameworks como Flask tienen convenciones sobre los tipos de mensajes para mostrar:
| Categoría | Uso típico |
|---|---|
| ✅ success | Algo salió bien, como un registro exitoso |
| ⚠️ warning | Avisos importantes que no son errores |
| ❌ error | Algo salió mal, hay que alertar al usuario |
Estas categorías te permiten aplicar diferentes estilos en tu HTML usando clases CSS.
Múltiples mensajes
Puedes mostrar varios mensajes Flash al mismo tiempo. Simplemente llamas a flash varias veces antes de la redirección, y luego get_flashed_messages los recupera todos:
flash('Bienvenido de nuevo', 'success')
flash('Verifica tu correo', 'warning')
flash('Hubo un problema al guardar los datos', 'error')
# Luego en /bar
get_flashed_messages(with_categories=True)
# Resultado:
# [
# ('success', 'Bienvenido de nuevo'),
# ('warning', 'Verifica tu correo'),
# ('error', 'Hubo un problema al guardar los datos')
# ]
¿Dónde se guardan los mensajes?
Estos mensajes se guardan en una sesión, algo que Flask maneja internamente con cookies. Las sesiones mantienen información entre múltiples solicitudes del mismo usuario. Más adelante en el curso verás sesiones con más detalle, pero por ahora solo necesitas saber que sin una sesión activa (y sin una clave secreta), Flask no puede guardar estos mensajes.
Código completo de ejemplo
Aquí tienes todo integrado en una pequeña aplicación:
from flask import Flask, flash, redirect, get_flashed_messages, render_template
app = Flask(__name__)
app.secret_key = "clave_secreta"
@app.post('/foo')
def foo_post():
flash('Operación realizada con éxito', 'success')
return redirect('/bar')
@app.get('/bar')
def bar_index():
messages = get_flashed_messages(with_categories=True)
return render_template('bar.html', messages=messages)
Y el HTML:
<!-- templates/bar.html -->
{% if messages %}
<ul class="flashes">
{% for category, message in messages %}
<li class="{{ category }}">{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
Resumen
- Los mensajes Flash se usan en aplicaciones web para mostrar alertas temporales al usuario.
- Flask ofrece la función
flash()para guardar el mensaje yget_flashed_messages()para recuperarlo. - Se muestran una sola vez, en la siguiente vista luego de una acción como enviar un formulario.
- Usan sesiones como sistema de almacenamiento temporal.
- Se integran fácilmente en los templates HTML y permiten customización con CSS.
Trabajo independiente
- Agrega la implementación de mensajes Flash al crear un usuario, usando ejemplos de la teoría.
Aplicación de referencia
Para acceder completo a curso necesitas un plan básico
El plan básico te dará acceso completo a todos los cursos, ejercicios y lecciones de Códica, proyectos y acceso de por vida a la teoría de las lecciones completadas. La suscripción se puede cancelar en cualquier momento.