2012-05-23 19 views
6

Ich habe eine Middleware, um einige Berechnungen/Prüfung für jede eingehende Anfrage zu machen. Einige Ansichten benötigen dieses Berechnungsergebnis.Django Middleware und HttpRequest Änderung

Da ich den gleichen Code nicht zweimal aufrufen möchte, möchte ich Ergebnisse in Middleware zu HttpRequest setzen, so dass Ansicht in der Lage sein wird, es zu lesen.

Können Sie mir mit dem richtigen Hinweis helfen, wie kann ich ein Objekt zu HttpRequest hinzufügen?

dank

Antwort

6

HttpRequest eine normale Klasse ist, können Sie direkt das Objekt zu seiner Instanz zuweisen, die request, in der Middleware. Zum Beispiel:

class MyMiddleware(object): 
    def process_request(self, request): 
     request.foo = 'bar' 
+0

ja, das ist richtig! Vielen Dank –

0

können Sie Httpresponse erweitern, indem Sie so genannte „monkey-patch“ -Methode. Zum Beispiel können Sie ganz einfach hinzufügen oder ersetzen Methoden und Eigenschaften in HttpResponse durch folgende Funktion aus Ihrem root Aufruf __init__.py oder wsgi.py oder sogar settings.py:

def apply_http_request_patch(): 

    def get_property_value(request): 
     # return lazily evaluated value 

    from django.http import HttpRequest 
    HttpRequest.some_property = property(get_property_value) 
Verwandte Themen