'WSGIRequest' object has no attribute 'session' while upgrading from django 1.3 to 1.9

荒凉一梦 提交于 2019-12-05 11:38:42

问题


Similar to this question 'WSGIRequest' object has no attribute 'session'

But my MIDDLEWARE classes are in the correct order.

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

I am redirecting to login

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

and then

def loginView(request):
    a = request.session

Throws the error


回答1:


MIDDLEWARE is a new setting in 1.10 that will replace the old MIDDLEWARE_CLASSES.

Since you're currently on 1.9, Django doesn't recognize the MIDDLEWARE setting. You should use the MIDDLEWARE_CLASSES setting instead:

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



回答2:


Django 2.0

You can try this in your settings.py, MIDDLEWARE_CLASSES = [....]:

  • Change MIDDLEWARE_CLASSES=[...] to MIDDLEWARE=[...]

  • Remove SessionAuthenticationMiddleware from the MIDDLEWARE=[...] list.

The MIDDLEWARE_CLASSES setting is deprecated in Django 1.10, and removed in Django 2.0.

The SessionAuthenticationMiddleware class is removed. It provided no functionality since session authentication is unconditionally enabled in Django 1.10.




回答3:


Check the order of the middleware, if you are trying to access it on some middlewares which are listed above the session middleware, you will get this error.




回答4:


This error can also be thrown when you have a typo. i.e.

request.sesion ... 

instead of

request.session ... 


来源:https://stackoverflow.com/questions/39480179/wsgirequest-object-has-no-attribute-session-while-upgrading-from-django-1-3

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!