web-dev-qa-db-fra.com

L'objet 'WSGIRequest' n'a pas d'attribut 'session' lors de la mise à niveau de Django 1.3 à 1.9

Semblable à cette question L'objet 'WSGIRequest' n'a pas d'attribut 'session'

Mais mes classes de MIDDLEWARE sont dans le bon ordre.

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

Je suis en train de rediriger pour me connecter

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

et alors

def loginView(request):
    a = request.session

Jette l'erreur

13
Shawn Anderson

MIDDLEWARE est un nouveau paramètre dans 1.10 qui remplacera l'ancien MIDDLEWARE_CLASSES.

Étant donné que vous utilisez actuellement la version 1.9, Django ne reconnaît pas le paramètre MIDDLEWARE. Vous devriez utiliser le paramètre MIDDLEWARE_CLASSES à la place:

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

Django 2.0

Vous pouvez essayer ceci dans votre settings.py, MIDDLEWARE_CLASSES = [....]: 

  • Remplacez MIDDLEWARE_CLASSES = [...] parMIDDLEWARE= [...] 

  • Supprimez SessionAuthenticationMiddleware de la liste MIDDLEWARE =.

Le paramètre MIDDLEWARE_CLASSES est obsolète dans Django 1.10 et supprimé dans Django 2.0. 

La classe SessionAuthenticationMiddleware est supprimée. Il a fourni n ° __. fonctionnalité puisque l'authentification de session est activée sans condition dans Django 1.10.

10
Slipstream

Cette erreur peut également être levée lorsque vous avez une faute de frappe. c'est à dire. 

request.sesion ... 

au lieu de 

request.session ... 
0
Mitsjol

Vérifiez l'ordre du middleware. Si vous essayez d'y accéder via certains middlewares répertoriés au-dessus du middleware de session, vous obtiendrez cette erreur.

0
Thomas John