2012-05-23 22 views
6

Mam oprogramowanie pośrednie, aby wykonać pewne obliczenia/sprawdzić dla każdego przychodzącego żądania. Niektóre widoki wymagają tego wyniku obliczeń.Django middleware i HttpRequest change

Ponieważ nie chcę wywoływać tego samego kodu dwa razy, chciałbym umieścić wyniki w HttpRequest w oprogramowaniu pośredniczącym, więc widok będzie mógł go odczytać.

Czy możesz mi pomóc z odpowiednią podpowiedzią, w jaki sposób mogę dodać obiekt do HttpRequest?

dzięki

Odpowiedz

6

HttpRequest jest normalne klasy, można bezpośrednio przypisać obiekt do jego przykład request w middleware. Na przykład:

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

tak, to prawda! dzięki –

0

można rozszerzyć przy użyciu HttpResponse tzw „monkey-patch” metody. Na przykład można łatwo dodać lub wymienić metody i właściwości język HttpResponse przez wywołanie następujących funkcji z poziomu korzenia __init__.py lub wsgi.py lub nawet 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) 
Powiązane problemy