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:
O si es un error, un color rojo:
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')
Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter