Django2.1.2创建工程后进入admin站点管理的时候报了:WSGIRequest' object has no attribute 'user 的错误

查stackoverflow和****,这是由于Django版本的问题,在1.10之前,中间件的key为MIDDLEWARE_CLASSES;在1.10之后,中间件的key为MIDDLEWARE。

  • 项目的初始配置:
MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',     
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',   
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.security.SecurityMiddleware',
)

将key值从MIDDLEWARE_CLASSES更改为MIDDLEWARE后,重新运行程序。

报错:

ImportError: Module "django.contrib.auth.middleware" does not define a "SessionAuthenticationMiddleware" attribute/class
在‘django.contrib.auth.middleware’ module的文件里,确实没有找到SessionAuthenticationMiddleware中间件,原因见‘remove SessionAuthenticationMiddleware中间件’,注释掉这一句后,再次运行程序,问题解决。

MIDDLEWARE = (     # 适配Django 2.0
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',     # 目前打开会报错
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    # 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',   
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.security.SecurityMiddleware',
)

remove SessionAuthenticationMiddleware中间件

在github查看源码,在更改history里面有原因说明:
Django2.1.2创建工程后进入admin站点管理的时候报了:WSGIRequest' object has no attribute 'user 的错误
Django2.1.2创建工程后进入admin站点管理的时候报了:WSGIRequest' object has no attribute 'user 的错误
Django2.1.2创建工程后进入admin站点管理的时候报了:WSGIRequest' object has no attribute 'user 的错误

  • 原因:由于Django1.10版本已经默认实现了session验证机制,SessionAuthenticationMiddleware中间件在Django2.0版本被弃用了。