【问题标题】:Django: Cannot access variable set in middlewareDjango:无法访问中间件中的变量集
【发布时间】:2018-03-15 06:00:53
【问题描述】:

我正在尝试在我的自定义中间件中向我的请求变量添加一个变量。稍后我想从我的视图中访问该变量。以下是相关位:

middleware.py

class DomainInterceptMiddleware(object):
    def process_request(self, request):
        request.myvar = 'whatever'

settings.py - 在上面添加了 CommonMiddleware

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'page.middleware.DomainInterceptMiddleware',  #
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

views.py

def index(request):
    output = request.myvar
    return HttpResponse(output)

但是,在尝试访问 /index 时,我收到此错误

  File "/path/to/views.py", line 32, in index
    output = request.myvar
AttributeError: 'WSGIRequest' object has no attribute 'myvar'

我哪里出错了?

【问题讨论】:

    标签: django django-middleware


    【解决方案1】:

    您当前的中间件类是为旧的MIDDLEWARE_CLASSES 设置编写的。

    您正在使用MIDDLEWARE 设置,因此您需要编写new-style middleware (Django 1.10+)。

    如果您需要向后兼容,可以使用django.utils.deprecation 中的MiddlewareMixin

    from django.utils.deprecation.MiddlewareMixin
    
    class DomainInterceptMiddleware(MiddlewareMixin):
        def process_request(self, request):
            request.myvar = 'whatever'
    

    或者您可以将其转换为新型中间件。

    class DomainInterceptMiddleware(object):
        def __init__(self, get_response):
            self.get_response = get_response
    
        def __call__(self, request):
            request.myvar = 'whatever'
            response = self.get_response(request)
            return response
    

    有关更多信息,请参阅writing your own middleware 上的文档。

    【讨论】:

      猜你喜欢
      • 2021-10-06
      • 2021-09-22
      • 2017-11-21
      • 2016-07-20
      • 1970-01-01
      • 2015-09-07
      • 1970-01-01
      • 2017-08-29
      • 1970-01-01
      相关资源
      最近更新 更多