2012-05-23 16 views
6

Ho un middleware per fare alcuni calcoli/controllo per ogni richiesta in arrivo. Alcuni punti di vista richiedono questo risultato di calcoli.Django middleware e HttpRequest cambia

Poiché non desidero chiamare due volte lo stesso codice, vorrei inserire i risultati in HttpRequest nel middleware, quindi la visualizzazione sarà in grado di leggerlo.

Potresti aiutarmi con il suggerimento giusto, come posso aggiungere un oggetto a HttpRequest?

grazie

risposta

6

HttpRequest è una classe normale, è possibile assegnare direttamente l'oggetto al suo esempio, il request, nel middleware. Per esempio:

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

sì, che è di destra! Grazie –

0

È possibile estendere HttpResponse utilizzando cosiddetto metodo "monkey-patch". Per esempio si può facilmente aggiungere o sostituire i metodi e le proprietà in HttpResponse chiamando seguente funzione dall'interno radice __init__.py o wsgi.py o anche 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)