.. _message_framework: Das Django Message Framework ***************************** https://python.plainenglish.io/introduction-to-django-messaging-and-notification-tool-9f1878fc186d Häufig müssen dem User nach der Verarbeitung eines Formulars oder anderer Arten von Benutzereingabeneinmalige Nachrichten angezeigt werden. Diese Nachrichten sind auch als Flash-Messages. bekannt. Sie geben dem User Feedback über eine geglückte oder misslungene Aktion. Dafür bietet Django volle Unterstützung für cookie- und sessionbasiertes Messaging, sowohl für anonyme als auch für authentifizierte Benutzer. Die Nachrichten ist mit einem Prioritätslevel gekennzeichnet, zb. "Info" oder "Warning". Message-Level --------------- Uns stehen 5 Nachrichten-Level zur Verfügung: ............................................. * info * debug * success * warning * error Frontendseitig könnte auf Basis dieser mitgesendeten Informationen die enstprechende CSS-Klasse gerendert werden. Mehr infos: ``_ In der function-based View eine Error-Message senden ----------------------------------------------------- In funktionsbasierten Views können wir das Messages-Objekt mit den enstprechenden Funktionen nutzen. In diesem Fall nutzen wir ``message.error``, um eine Message mit Status ``error`` zu senden. .. code-block:: python def add_category(request): if request.method == "POST": form = CategoryForm(request.POST or None) if form.is_valid(): form.save() return redirect("events:categories") else: # send flash message messages.error(request, "Das Form ist nicht valide!") else: form = CategoryForm() return render( request, "events/category_add.html", {"form": form}, ) In der Create View eine Success-Meldung -------------------------------------------- In klassenbasierten Views Wir öffnen die Datei ``event_manager/events/views.py`` und fügen zur Klasse ``EventCreateView`` das Attribut ``success_message`` hinzu. Dafür müssen wir noch ``SuccessMessageMixin`` importieren und als Mixin für unsere View nutzen. Um eine Message zu senden, wenn ein Fehler im Formular aufgetreten ist, können wir die Methode ``form_invalid`` überschreiben und die message von dort aus senden. .. code-block:: python from django.contrib import messages from django.contrib.messages.views import SuccessMessageMixin # anderer Code class EventCreateView(LoginRequiredMixin, SuccessMessageMixin, CreateView): model = Event form_class = EventForm success_message = "Der Event wurde erfolgreich eingetragen" def form_invalid(self, form): messages.error(self.request, "Das Form ist nicht valide!") return super().form_invalid(form) Im Template die Message darstellen ---------------------------------------- Um die Messages darzustellen, brauchen wir einen zentralen Ort, damit wir es nicht in jedes Template schreiben müssen. Wir öffnen dazu die Datei ``event_manager/templates/base.html`` und fügen folgenden Code ein: .. code-block:: bash {% if messages %} {% endif %} Füllt der User jetzt das Formular aus, um einen Event zu erstellen und macht dabei einen Fehler, wird er wieder auf die Formularseite zurückgeschickt. Dort wird dann die Message angezeigt. Nachdem eine Message angezeigt wurde, wird sie aus dem ``Storage-Backend`` gelöscht. Eine Message wird nur einmal angzeigt. Mehr Infos: ``_