7

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

由于我不想两次调用相同的代码,我想将结果放在中间件中的 HttpRequest 中,以便视图能够读取它。

你能帮我正确的提示吗,我怎样才能向 HttpRequest 添加一个对象?

谢谢

4

2 回答 2

8

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

class MyMiddleware(object):
    def process_request(self, request):
        request.foo = 'bar'
于 2012-05-23T16:27:57.487 回答
0

您可以使用所谓的“ monkey-patch ”方法扩展 HttpResponse。例如,您可以HttpResponse通过从根目录中调用以下函数,甚至可以轻松地添加__init__.py或替换方法和属性:wsgi.pysettings.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)
于 2016-01-19T14:48:32.140 回答