2016-09-13 89 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

檢查中間件的順序,如果您嘗試在會話中間件上方列出的某些中間件上訪問它,則會出現此錯誤。

相關問題