Überwachte maschinelle Übersetzung
Dieser Inhalt wurde maschinell übersetzt und basiert auf von Menschen kuratierten Glossaren und Styleguides. Da der Text nicht zeilenweise manuell überprüft wird, können gelegentlich Fehler oder unklare Formulierungen auftreten.
Bei etwaigen Abweichungen ist die ursprüngliche englische Version die maßgebliche Quelle.
Flash-Meldungen
Flash-Meldungen geben Benutzern temporäres, einmaliges Feedback, nachdem sie eine Aktion ausgeführt haben, etwa „Beitrag erfolgreich erstellt“ oder „Ungültiger Dateityp“. Eine Meldung übersteht genau eine HTTP-Weiterleitung und wird vom Admin nach der Anzeige verworfen.
flash() stellt eine Meldung in die Warteschlange des aktuellen Requests. Der Admin rendert die Meldung auf der nächsten Seite, die der Benutzer sieht, und leert anschließend die Warteschlange. Dieses Muster stammt von Flask-Admin.
from starlette.requests import Request
from starlette_admin import BaseModelView
from starlette_admin.flash import flash
class PostView(BaseModelView):
async def before_create(self, request: Request, data: dict) -> None:
if not data.get("title", "").strip():
# Queue the message for the next page load
flash(request, "Title cannot be blank.", category="error")
raise ValueError("Title cannot be blank.")
Meldungskategorien
Jede Flash-Meldung benötigt eine Kategorie. Die Kategorie legt die Farbe des Banners im Standard-Theme fest, sodass Benutzer den Schweregrad auf einen Blick erkennen können.
from starlette_admin.flash import flash
flash(request, "Report generated.", category="success")
flash(request, "3 rows were skipped.", category="info")
flash(request, "This action can't be undone.", category="warning")
flash(request, "Upload failed: file too large.", category="error")
Das Argument category ist standardmäßig "info". Es muss exakt einer der Werte success, info, warning oder error sein. Jeder andere Wert löst einen ValueError aus.
Eingebaute CRUD-Meldungen
Für Standard-CRUD-Operationen müssen Sie flash() nicht selbst aufrufen. Der Admin zeigt automatisch eine success-Meldung an, sobald diese Aktionen abgeschlossen sind:
| Aktion | Standardmeldung |
|---|---|
| Create | The item "<repr>" was added successfully. |
| Edit | The item "<repr>" was changed successfully. |
| Delete (single) | The item "<repr>" was successfully deleted. |
| Delete (bulk) | %(count)d items were successfully deleted. |
Worauf sich <repr> bezieht
Die automatischen Meldungen verwenden die Zeilendarstellung, die view.repr() definiert, nicht den Klassennamen des Modells. Beim Anlegen eines Beitrags erscheint beispielsweise „The item 'My First Post' was added successfully" statt eines generischen „Post was added successfully".
Verwendung von Flash-Meldungen in eigenen Aktionen
Handler für eigene Aktionen (@action und @row_action) geben standardmäßig None zurück. Um dem Benutzer Feedback zu geben, rufen Sie flash() auf, bevor der Handler zurückkehrt.
from starlette.requests import Request
from starlette_admin import BaseModelView, action, flash
class PostView(BaseModelView):
@action(
name="publish",
text="Publish",
confirmation="Publish the selected posts?",
)
async def publish_action(self, request: Request, pks: list) -> None:
for pk in pks:
obj = await self.find_by_pk(request, pk)
obj.published = True
await self.edit(request, pk, {"published": True})
# Notify the user that the custom action succeeded
flash(request, f"{len(pks)} post(s) published.", category="success")
- Wenn Sie
flash()weglassen: Die Aktion läuft weiterhin durch, aber der Benutzer erhält nach der Weiterleitung keine visuelle Bestätigung. - Wenn die Aktion fehlschlägt: Wenn Ihre eigene Aktion
ActionFailedauslöst, fängt der Admin die Exception ab und zeigt deren Text als Fehlerbanner an. Rufen Sie in einemActionFailed-Zweig keinflash()auf, da der Request nicht weitergeleitet wird.
Rendern von Meldungen in eigenen Templates
Das Basis-Template des Admins holt die Flash-Meldungen ab und rendert sie für Sie. Sie müssen sie nur dann selbst abrufen, wenn Sie eine vollständig eigene View erstellen.
from starlette_admin.flash import get_flashed_messages
messages = get_flashed_messages(request)
# Returns: [{"message": "The item \"My First Post\" was added successfully.", "category": "success"}]
Der Lesezugriff auf die Flash-Warteschlange ist destruktiv. Der erste Aufruf von get_flashed_messages(request) holt die Meldungen ab und leert die Warteschlange. Weitere Aufrufe innerhalb desselben Requests geben eine leere Liste zurück, [].
Halten Sie Meldungen kurz
Flash-Meldungen werden in einem signierten, httponly-Cookie namens admin_flash gespeichert, nicht in der Server-Session. Browser begrenzen die Cookie-Größe auf etwa 4 KB, verwenden Sie Flash-Meldungen daher ausschließlich für kurzes Feedback. Vermeiden Sie lange Zeichenketten und große Daten-Payloads. Der Cookie-basierte Ansatz bedeutet außerdem, dass Flash-Meldungen auch ohne SessionMiddleware funktionieren.
Sehen Sie sich examples/09-actions für eine lauffähige App an, die
flash()aus Hooks und eigenen Aktionen aufruft.
Was kommt als Nächstes
- Aktionen: Lösen Sie Geschäftslogik über Bulk- oder Zeilenaktionen aus.
- Sicherheit: Erfahren Sie, wie
secret_keysowohl das Flash-Cookie als auch CSRF-Tokens absichert. - Templates: Rendern Sie Flash-Banner in Ihren eigenen Layouts.