Django中间件和HttpRequest发生了变化

时间:2012-05-23 16:21:57

标签: django httprequest django-middleware

我有一个中间件来对每个传入的请求进行一些计算/检查。有些观点需要这个计算结果。

由于我不想两次调用相同的代码,我想在中间件中将结果放到HttpRequest中,因此view可以读取它。

你能用正确的提示帮助我吗?如何将对象添加到HttpRequest?

感谢

2 个答案:

答案 0 :(得分:6)

HttpRequest是一个普通类,您可以直接将对象分配给其中间件中的实例request。例如:

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

答案 1 :(得分:0)

您可以使用所谓的" monkey-patch"来扩展HttpResponse。方法。例如,您可以通过在根HttpResponse__init__.py甚至wsgi.py内调用以下函数,轻松地将方法和属性添加或替换为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)
相关问题