从django 1.3升级到1.9时,'WSGIRequest'对象没有属性'session'

Sha*_*son 16 python django django-middleware

类似于这个问题'WSGIRequest'对象没有属性'session'

但是我的MIDDLEWARE类的顺序正确.

INSTALLED_APPS = [
    'django.contrib.sessions',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'membership',
    'treebeard',
    'haystack',
    'reversion',
]

MIDDLEWARE = [
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
Run Code Online (Sandbox Code Playgroud)

我正在重定向到登录

url(r'^$',  RedirectView.as_view(url='login/')),
url(r'^login/$', 'membership.views.loginView', name='login'),
Run Code Online (Sandbox Code Playgroud)

然后

def loginView(request):
    a = request.session
Run Code Online (Sandbox Code Playgroud)

抛出错误

knb*_*nbk 25

MIDDLEWARE是1.10中的新设置,将取代旧的MIDDLEWARE_CLASSES.

由于您目前使用的是1.9,因此Django无法识别该MIDDLEWARE设置.您应该使用该MIDDLEWARE_CLASSES设置:

MIDDLEWARE_CLASSES = [
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
Run Code Online (Sandbox Code Playgroud)

  • Django 2.0现在使用`MIDDLEWARE`代替`MIDDLEWARE_CLASSES`,正如@Slipstream和[在这个帖子中]所指出的那样(/sf/answers/3335531321/) (4认同)

Sli*_*eam 13

Django 2.0

您可以在settings.py,MIDDLEWARE_CLASSES = [....]中尝试此操作:

  • MIDDLEWARE_CLASSES = [...] 更改为MIDDLEWARE = [...]

  • 从MIDDLEWARE = [...]列表中删除SessionAuthenticationMiddleware.

MIDDLEWARE_CLASSES设置在Django 1.10中已弃用,在Django 2.0中已删除.

SessionAuthenticationMiddleware类已删除.它没有提供任何功能,因为在Django 1.10中无条件启用了会话身份验证.


Mit*_*jol 6

当您输入错误时,也可能会引发此错误。IE

request.sesion ... 
Run Code Online (Sandbox Code Playgroud)

代替

request.session ... 
Run Code Online (Sandbox Code Playgroud)

  • 当我读到你可能的解决方案时,我笑了!然后我检查了一下,发现我犯了完全相同的打字错误。现在我笑着流泪 (5认同)