2012-05-23 22 views
6

Tengo un middleware para hacer algunos cálculos/verificar cada solicitud entrante. Algunos de vista necesitan este resultado de cálculos.Middleware Django y HttpRequest change

Como no quiero llamar al mismo código dos veces, me gustaría poner los resultados en HttpRequest en middleware, por lo que view podrá leerlo.

¿Podría ayudarme con la pista correcta, cómo puedo agregar un objeto a HttpRequest?

gracias

Respuesta

6

HttpRequest es una clase normal, se podría asignar directamente los objetos a su instancia, la request, en el middleware. Por ejemplo:

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

sí, eso es correcto! Gracias –

0

Puede extender HttpResponse utilizando el método llamado "monkey-patch". Por ejemplo, puede agregar o reemplazar los métodos y propiedades en HttpResponse llamando a la función siguiente desde su raíz __init__.py o wsgi.py o incluso 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) 
Cuestiones relacionadas