Mensajes flash en Flask

- Andrés Cruz

In english

Mostrar mensajes de confirmación según la operación realizada, es una tarea regular; en muchos otras tecnologías incluyendo Flash, existen los mensajes flash, que son aquellos que solamente duran una petición on request, por lo tanto, son ideales para indicar si el registro se crea, actualiza o elimina correctamente o simplemente un error de sistema u otro mensaje; para esto, tenemos la función llamada flash() que recibe como argumento, el mensaje correspondiente:

my_app\tasks\controllers.py

from flask import flash
***
@taskRoute.route('/update/<int:id>', methods=['GET','POST'])
def update(id:int):
   ***
   if form.validate_on_submit():
      operations.update(form.name.data, form.category.data)
      flash('The registry has been updated successfully')
   return render_template('dashboard/task/update.html', form=form, formTag=formTag, formTagDelete=forms.TaskTagRemove() ,task=task, id=id)

Ahora, para mostrar el mensaje, lo hacemos desde los templates mediante la función get_flashed_messages() que devuelve un listado de los mensajes establecidos (podemos establecer más de un mensaje por petición) y los iteramos:

my_app\templates\dashboard\master.html

***
<body>
    {% with messages = get_flashed_messages() %}
    {% if messages %}
    <ul class=flashes>
        {% for message in messages %}
        <li>{{ message }}</li>
        {% endfor %}
    </ul>
    {% endif %}
    {% endwith %}
***

Al poder emplear los mensajes tipo flash en cualquier situación y no solo en las operaciones CRUDs anteriores, resulta buena idea colocarlo en el template, para que una vez establecidos desde el controlador, puedan ser mostrados sin importar el controlador que los defina.

Categorías

También es posible definir categorías en los mensajes, esto es útil si dependiendo el tipo de mensaje quieres colocar un diseño diferente, por ejemplo, si el mensaje es informativo, colocamos un contenedor azul:

Mensaje de alert para las categorías de información
Mensaje de alert para las categorías de información

O si es un error, un color rojo:

Mensaje de alert para las categorías de error
Mensaje de alert para las categorías de error

Entre otras posibles adaptaciones; para ello, definimos un segundo parámetro a la función de flash() que corresponde a la categoría:

flash('The registry has been updated successfully', 'info')

Y desde el template, podemos filtrar por la categoría:

{% with infos = get_flashed_messages(category_filter=["info"]) %}
{% if errors %}
    {%- for msg in infos %}
***

O podemos indicar que al momento de obtener el listado de mensajes flash, devuelva la categoría en una tupla:

{% with messages = get_flashed_messages(with_categories=true) %}
{% if messages %}
   {% for message in messages %}
***

Y tendremos la categoría como parte del mensaje:

('info', 'The registry has been updated successfully')
Andrés Cruz

Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter

Andrés Cruz en Udemy