我有一个中间件来对每个传入的请求进行一些计算/检查。有些观点需要这个计算结果。
由于我不想两次调用相同的代码,我想在中间件中将结果放到HttpRequest中,因此view可以读取它。
你能用正确的提示帮助我吗?如何将对象添加到HttpRequest?
感谢
答案 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)