首页 > 解决方案 > request.user 在 settings.py 中使用时没有属性 user

问题描述

AttributeError: 'WSGIRequest' object has no attribute 'user'当我尝试在我的 settings.py 文件中使用request.user 时,它会产生错误。难道我做错了什么?

设置.py:

def show_toolbar(request):
    if DEBUG:
        return True
    #if not request.is_ajax() and request.user and request.user.UserSettings.debugger:
    #    return True
    return False
DEBUG_TOOLBAR_CONFIG = {
    'SHOW_TOOLBAR_CALLBACK': 'acacia2.settings.show_toolbar',
}

标签: djangodjango-debug-toolbar

解决方案


如果没有看到您的中间件列表,我不能肯定地说,但这是我怀疑正在发生的事情:

为什么它不起作用

  • user属性由contrib.auth中间件设置。
  • 您在上面定义的函数由 django-debug-toolbar 中间件调用。

如果您的 django-debug-toolbar 中间件contrib.auth在您的设置中定义的中间件列表中的中间件之前MIDDLEWARE,那么当请求到达您的调试工具栏中间件时,它还没有设置用户对象。因此你的错误('WSGIRequest' object has no attribute 'user')。

如何修复它

确保 django-debug-toolbar 中间件在 auth 中间件之后,例如:

MIDDLEWARE = [
    ...
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    ...
    'debug_toolbar.middleware.DebugToolbarMiddleware',
    ...

]

推荐阅读