【问题标题】:Django middleware and HttpRequest changeDjango 中间件和 HttpRequest 变化
【发布时间】:2012-05-23 16:21:56
【问题描述】:

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

由于我不想调用相同的代码两次,我想把结果放到中间件的HttpRequest中,这样view就可以读取它。

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

谢谢

【问题讨论】:

    标签: django httprequest django-middleware


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      您可以使用所谓的“monkey-patch”方法扩展 HttpResponse。例如,您可以通过从根 __init__.pywsgi.py 甚至 settings.py 调用以下函数,轻松地将方法和属性添加或替换到 HttpResponse

      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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-29
        • 1970-01-01
        • 2019-10-20
        • 1970-01-01
        • 2010-10-26
        • 2016-12-12
        • 1970-01-01
        • 2014-04-15
        相关资源
        最近更新 更多