WSGIRequest对象在中间件函数上没有属性用户

时间:2015-02-19 18:59:00

标签: django url django-urls django-users django-middleware

我有以下中间件功能:

class LastVisitMiddleware(object):
    def process_response(self, request, response):
        if request.user.is_authenticated():
            customer = get_customer(request)
            Customer.objects.filter(pk=customer.pk).update(last_visit=now())
        return response

我的中间件条目如下所示:

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'my.middleware.LastVisitMiddleware',

)

我的网址如下:

url(r'^dashboard/$', views.dashboard, name='dashboard'),

当我转到具有正斜杠的网址时,页面会正常加载。当我省略正斜杠时,我得到错误:

  

WSGIRequest对象没有属性用户

当我删除中间件时,无论是否使用正斜杠,都没有问题。

如果有或没有正斜杠,我如何防止抛出此错误?

2 个答案:

答案 0 :(得分:4)

我知道Django重定向任何不带尾随/的网址,所以/home/home/,但我不确定Django何时进行此重定向(显然是在运行中间件之后) ?)。解决此问题的一种方法是检查user对象是否已设置;

if hasattr(request, 'user') and request.user.is_authenticated():

这可以解决您的问题。

答案 1 :(得分:0)

  

在响应阶段(process_response()和process_exception()中间件),类从底部向上以相反的顺序应用

类似的问题:

Django: WSGIRequest' object has no attribute 'user' on some pages?