[Django] Middleware

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
BerlinerMC
User
Beiträge: 25
Registriert: Montag 8. Dezember 2008, 19:32

Hallo Community,

ich wollte mal fragen ob es möglich ist, eine Middleware nur einmal, bevor die view angezeigt wird, auszuführen?!

Leider ist es immoment so, dass bei jedem request die Middleware ausgeführt wird z.B. beim Laden der CSS Datei , Bilder usw.

Lg
Alex / Berliner
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

BerlinerMC hat geschrieben: ich wollte mal fragen ob es möglich ist, eine Middleware nur einmal, bevor die view angezeigt wird, auszuführen?!
Was verstehst du unter hier unter Middleware? Meinst du das Parsen der URL, die Zuordnung zu einer View und die Verarbeitung dort? So lange du nicht explizit selber eine weitere Verarbeitung aufrufst findet auch keine statt.
BerlinerMC hat geschrieben: Leider ist es immoment so, dass bei jedem request die Middleware ausgeführt wird z.B. beim Laden der CSS Datei , Bilder usw.
Wenn es dir um statische Dateien geht, dann schau dir mal http://docs.djangoproject.com/en/dev/ho ... tic-files/ an.
BerlinerMC
User
Beiträge: 25
Registriert: Montag 8. Dezember 2008, 19:32

Naja ich möchte das eine Funktion aufgerufen wird, bevor die Seite angezeigt wird. Ich hatte gehofft das ich es mit Middleware lösen könnte.

Jedoch besteht hier das Problem das die Funktion mehrmal, bei jedem request, aufgerufen wird!

Gibt es andere Möglichkeiten Funktionen aufzurufen, irgendwo an einer Zentralen Stelle?!
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Was willst du denn eigentlich tun?
Bottle: Micro Web Framework + Development Blog
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

BerlinerMC hat geschrieben:Naja ich möchte das eine Funktion aufgerufen wird, bevor die Seite angezeigt wird. Ich hatte gehofft das ich es mit Middleware lösen könnte.
Dafür sind middlewares da…
Jedoch besteht hier das Problem das die Funktion mehrmal, bei jedem request, aufgerufen wird!
Nein pro request wird eine Django middleware definitiv nur einmal aufgerufen!
BerlinerMC
User
Beiträge: 25
Registriert: Montag 8. Dezember 2008, 19:32

BerlinerMC hat geschrieben:Naja ich möchte das eine Funktion aufgerufen wird, bevor die Seite angezeigt wird. Ich hatte gehofft das ich es mit Middleware lösen könnte.
Also z.B. eine Funktion die Zählt wie oft ein User Seiten aufruft.
Also ein User loggt sich ein und klickt nun auf meiner Homepage rum. Im Hintergrund gibt es einen Zähler und speichert das gezählte ggf. in die DB ein und ich kann im Nachhinein nachvollziehen wie viel Seiten er aufgerufen hat.
Ist nun ein bisschen trivial und man fragt sich bestimmt wozu ich das benötige! Eine derartige Funktion benötige ich auch nicht, aber so ungefähr.

Aber eine derartige Funktion nun in jeder "View" einzufügen wäre ein bisschen umständlich?!

Daher hoffte ich das ich sowas mit Middleware zentral lösen könnte.
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Dann zähl in der Middleware doch einfach mit, wo ist das Problem? Die Middleware wird wie gesagt nur einmal pro request ausgeführt, also genau das was du willst…
lunar

"Eine Seite" ist nicht gleichbedeutend mit "einem Request".
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

lunar hat geschrieben:"Eine Seite" ist nicht gleichbedeutend mit "einem Request".
Doch, er kann ja mit request.is_ajax die Ajax Requests ausschließen, die übrigen entsprechen dann den Views…
lunar

So? Was ist beispielsweise mit Bildern, die dynamisch erzeugt werden (e.g. capchas)?
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

lunar hat geschrieben:So? Was ist beispielsweise mit Bildern, die dynamisch erzeugt werden (e.g. capchas)?
Für deren Requests baut man eine Negativliste in der Middleware um sie nicht mitzuzählen.
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

lunar hat geschrieben:So? Was ist beispielsweise mit Bildern, die dynamisch erzeugt werden (e.g. capchas)?
Nun du kannst jetzt noch mit 100 Beispielen kommen und ich werde dir immer sagen, was du tun musst damit eine Middleware dennoch passt, also lassen wir das :þ Abgesehen davon könnte man natürlich decorators auch verwenden, wird allerdings unlustig jeden View zu dekorieren…
Antworten