El framework de mensajes de Django

209 0

Con bastante frecuencia en las aplicaciones web es necesario mostrar un mensaje de notificación por única vez (también conocido como «mensaje flash») al usuario después de procesar un formulario o algunos otros tipos de entrada del usuario a fin de notificarle que ha ocurrido algo en el backend.

Esta acción de emitir notificaciones es sumamente fácil de hacer gracias a las funciones incluidas en el framework web Django.

Los niveles de

Los niveles de mensajes que Django utiliza por default son los siguientes:

NivelPropósito
DEBUGMensajes de nivel desarrollo que serán omitidos una vez que el proyecto se encuentra ejecutándose a nivel productivo.
INFOMensajes de información para los usuarios.
SUCCESSMensaje que notifica que algo ha concluido satisfactoriamente.
WARNINGMensaje que alerta al usuario que existe una advertencia en alguna acción. No significa que haya existido un error.
ERRORMensaje que notifica al usuario que algo salió mal en la acción que acaba de ejecutar.

¿Cómo se utilizan en las vistas y los templates?

Pongamos como ejemplo el siguiente código:

from django.contrib import messages
from django.views.generic import View
from .models import Blog

class AddArticleView(View):
    template_name = "add_blog.html"
    
    def get(self, request):
        ctx = {}
        return render(request, self.template_name, ctx)
    
    def post(self, request):
        try:
            article = Article()
            article.title = "Bienvenido"
            article.save()
            message.success(request, "Guardado correctamente")
        except: 
            message.error(request, "Hubo un error al guardar el artículo")
        return self.get(request)

Podemos apreciar una vista simple que al recibir un post almacena un objeto en base de datos llamado Article, como podemos apreciar, hemos agregado la línea de código «message.success(request, «Guardado correctamente»)» para notificarle al usuario que todo ha salido bien y de igual forma en el except hemos agregado la línea de código «message.error(request, «Hubo un error al guardar el artículo»)«.

Esto ayudará al usuario que está navegando en la web para saber si su artículo fue almacenado correctamente o si existió algún tipo de error y no concluyó el proceso satisfactoriamente.

Ahora vayamos en la vista HTML y veamos cómo se implementa:

{% if messages %}
<ul class="messages">
    {% for message in messages %}
    <li>
        {% if message.level == DEFAULT_MESSAGE_LEVELS.ERROR %}Error:
        {% elif message.level == DEFAULT_MESSAGE_LEVELS.SUCCESS %}¡Bien!:
        {% elif message.level == DEFAULT_MESSAGE_LEVELS.WARNING %}Advertencia:
        {% elif message.level == DEFAULT_MESSAGE_LEVELS.INFO %}Aviso: {% endif %}
        {{ message }}
    </li>
    {% endfor %}
</ul>
{% endif %}

¿Muy fácil verdad? En el ejemplo de arriba vemos una implementación muy sencilla en HTML para recorrer por medio del contexto que se envía al template cada uno de los mensajes para presentarlos en una lista simple con HTML puro. Ahora si estamos utilizando algún framework del tipo Bootstrap, bastará nuestra imaginación para poder implementar algún tipo de alert o toast para que sea más llamativo al usuario la lectura de los mensajes.

¡Bien! el día de hoy has aprendido un tema muy interesante y a la vez sencillo de implementar. Si ya has implementado esta funcionalidad en alguno de tus proyectos deja aquí tus comentarios y cuéntanos si has logrado mejorar el uso de este message framework en tu código 😀

Si quieres conocer más sobre este framework te dejo la liga de la documentación oficial de Django: https://docs.djangoproject.com/en/3.2/ref/contrib/messages/

Deja una respuesta