Also WSGI ist ja eigentlich sowas wie ein Generator. Beim ersten Starten (zumindest bei fastCGI, mod_Python und Co.) wird dieser einmal Instanziert/Initialisiert. Jeder Request wird rein "geschickt" und die Ausgaben zum Client gesendet...
Bei Django ist es aber irgendwie komisch. Man verknüpft ja URLs per RE an einen View. Ein View ist allerdings nur eine normale Funktion.
Was mache ich also, wenn ich in django gern mit Klassen rumwerkeln möchte? Wenn z.B. einige Dinge nur einmalig erledigt (initialisiert) werden muß, packe ich das in __init__ rein. Bei django habe ich aber nicht die Möglichkeiten dazu... Ich müsste eigentlich bei jedem view Dinge initialisieren um sie benutzten zu können.
Hab ich da was übersehen???
EDIT: Mir fällt da doch eine Variante ein: middlewares...
django <-> WSGI
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Hm. OK, mit Dekoratoren kann ich quasi Routinen auslagern. Wobei ich das auch mit normalen Funktionen machen kann.
Das ist aber nicht das Problem, was ich meinte.
Also mit einer Middleware kann ich das machen:
In __init__ kann ich also alle Dinge machen, die nicht request Abhängig sind.
Außerdem könnte ich einen kleinen Cache aufziehen...
Das kann ich nicht mit normalen Funktionen und ich wüsste nicht wie Dekoratoren da helfen könnten.
Das ist aber nicht das Problem, was ich meinte.
Also mit einer Middleware kann ich das machen:
Code: Alles auswählen
class BeispielMiddleware(object):
cache = {}
def __init__(self):
# Mache aufwendige initialisierungen
foo = Foo()
def process_view(self, request, view_func, view_args, view_kwargs):
# Nutzt für jeden request das initialisierte Objekt
if bla in self.cache:
response = self.cache[bla]
else:
response = foo.process_view(request)
return response
Außerdem könnte ich einen kleinen Cache aufziehen...
Das kann ich nicht mit normalen Funktionen und ich wüsste nicht wie Dekoratoren da helfen könnten.