2016-09-13 59 views
6

与此类似问题'WSGIRequest' object has no attribute 'session'“WSGIRequest”对象有没有属性“会议”,而从Django的1.3升级到1.9

但我的中间件类是正确的顺序。

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', 
] 

我重定向到登录

url(r'^$', RedirectView.as_view(url='login/')), 
url(r'^login/$', 'membership.views.loginView', name='login'), 

然后

def loginView(request): 
    a = request.session 

抛出错误

回答

15

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', 
] 
3

的Django 2.0

你可以在你的settings.py试试这个,MIDDLEWARE_CLASSES = [...]:

  • 变化MIDDLEWARE_CLASSES = [...]至MIDDLEWARE = [...]

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

的MIDDLEWARE_CLASSES设置已被弃用在Django 1.10,和在Django 2.0移除 。

SessionAuthenticationMiddleware类被删除。它没有提供 的功能,因为在Django 1.10中无条件启用会话认证 。

0

检查中间件的顺序,如果您尝试在会话中间件上方列出的某些中间件上访问它,则会出现此错误。

相关问题