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

查stackoverflow和CSDN,这是由于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 的错误_第1张图片
Django2.1.2创建工程后进入admin站点管理的时候报了:WSGIRequest' object has no attribute 'user 的错误_第2张图片
Django2.1.2创建工程后进入admin站点管理的时候报了:WSGIRequest' object has no attribute 'user 的错误_第3张图片

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

你可能感兴趣的:(python)