我有以下中间件功能:
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对象没有属性用户
当我删除中间件时,无论是否使用正斜杠,都没有问题。
如果有或没有正斜杠,我如何防止抛出此错误?
答案 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?