Aktions-Feedback zum User schicken, wie? (flash messages)

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 15. Mai 2008, 10:49

Ich frage mich wie man am besten dem User eine Nachricht als feedback zu einer ausgeführten Aktion in der Web App auf der nächsten Seite zeigen kann.

Der einfachste Weg wäre wohl in den GET Daten einfach sowas wie ?msg=Text dran zu hängen und die Daten dann in der Webseite einzublenden.
Wäre aber eine sehr dumme Idee, weil man so Cross-Site Scripting einfach macht ;) Die Nachricht in den POST Daten zu "verstecken" ist wohl ebenso Sinnlos.

Die Nachricht in den Session Daten auf dem Server belassen wäre ok. Es gibt da sogar schon mehrere Varianten:
http://www.djangosnippets.org/snippets/319/
http://www.djangosnippets.org/snippets/331/

Dumm ist es allerdings, wenn der User mehrere Seiten gleichzeitig anzeigen läßt. So kann es sein, das die Nachricht evtl. auf einer falschen Seite angezeigt wird.

In Pylons und turbogrars heißt das wohl "flash messages". Ich hab das in einem Pylons Template gefunden:

Code: Alles auswählen

<%  flash_message = h.flash.pop_message()  %>
% if flash_message:
<div id="flash-message">${flash_message | h}</div>
% endif
Hab noch gefunden: http://www.splee.co.uk/2005/11/23/fancy ... -tg_flash/ Dort wird mit Ajax mitteln gearbeitet.

In PyLucid habe ich eine selbe Funktion, die jedoch die Nachricht nicht in die "nächste" Seite anzeigen kann, sondern immer nur in die aktuell gerenderte Seite. Das ist auch für 99% der Fälle bisher vollkommen ok.

Alternativen? Wie macht ihr das?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Donnerstag 15. Mai 2008, 11:38

Ich hab's selbst noch nicht verwendet, aber die Turbogears-Variante klingt für mich nicht schlecht und sie kann ja problemlos auch ohne Turbogears verwendet werden. Im Master-Template, von dem die eigenen Templates erben, wird - falls vorhanden - eine bestimmte dem Template übergebene Variable (bei Turbogears TG-Flash) in einer Extrazeile ausgegeben. Das sieht also wie Deine Pylons-Variante aus (hier heißt die Variable flash_message) und es kann wohl mit jeder Template-Engine nachgebildet werden. Du brauchst dabei auch nicht unbedingt ein Master-Template, es macht die Nachrichtenausgabe aber sicher einheitlicher.
Schön ist dabei, dass du selbst festlegen kannst, auf welcher Seite die Nachricht ausgegeben werden soll.
MfG
HWK
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Donnerstag 15. Mai 2008, 19:12

Ich hatte mir für Django etwas nach dem Vorbild von Rails gebaut, wo ich im Quelltext gespickt hatte, wie das funktioniert. Und ich meine mich zu erinnern, dass das auch dort ganz simpel mit einem Hash in der Session funktioniert, welcher nicht berücksichtigt, dass der Anwender zwei Workflows in zwei Fenstern haben könnte.

Wenn du sowas willst, musst du wohl Workflow-IDs in den URLs mitführen und kannst nicht einfach ein Cookie benutzen, so wie Django das standardmäßig macht.

Stefan
lunar

Freitag 16. Mai 2008, 01:03

Man kann ja auch ganz old-school arbeiten, und einfach einen passenden Response zurückschicken, oder?
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Freitag 16. Mai 2008, 12:57

Nachdem ich es schon lange auf'm Zettel hatte, habe ich dieses Thema zum Anlass genommen, ein Snippet zu Flash Messages zusammen zu stellen. Der Code entstammt ("unserem") Palaver, das aber nicht so öffentlich ist, dass ich darauf verweisen möchte - deshalb hier separat.

Den Code, um das Session-Objekt zugänglich zu machen habe ich da rausgehalten; wer ohnehin auf einer Ebene bastelt, auf der er Flash Messages selbst implementieren möchte, der kriegt das drumherum auch so (entsprechend der eingesetzten Komponenten) hin. Ganz trivial ist der Teil mit den Context Locals vielleicht nicht, aber dafür hier umso eleganter. Variationen, die z.B. die Session als Argument übergeben, dürfen natürlich gerne hier dargelegt werden :)
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Freitag 16. Mai 2008, 17:31

lunar hat geschrieben:Man kann ja auch ganz old-school arbeiten, und einfach einen passenden Response zurückschicken, oder?
Und wie ohne Session/Cookie für den State?
TUFKAB – the user formerly known as blackbird
Antworten