【发布时间】:2012-05-23 16:21:56
【问题描述】:
我有一个中间件来为每个传入的请求进行一些计算/检查。有些视图需要这个计算结果。
由于我不想调用相同的代码两次,我想把结果放到中间件的HttpRequest中,这样view就可以读取它。
你能帮我正确的提示吗,我怎样才能向 HttpRequest 添加一个对象?
谢谢
【问题讨论】:
标签: django httprequest django-middleware
我有一个中间件来为每个传入的请求进行一些计算/检查。有些视图需要这个计算结果。
由于我不想调用相同的代码两次,我想把结果放到中间件的HttpRequest中,这样view就可以读取它。
你能帮我正确的提示吗,我怎样才能向 HttpRequest 添加一个对象?
谢谢
【问题讨论】:
标签: django httprequest django-middleware
HttpRequest 是一个普通的类,您可以在中间件中直接将对象分配给它的实例request。例如:
class MyMiddleware(object):
def process_request(self, request):
request.foo = 'bar'
【讨论】:
您可以使用所谓的“monkey-patch”方法扩展 HttpResponse。例如,您可以通过从根 __init__.py 或 wsgi.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)
【讨论】: