为了账号安全,请及时绑定邮箱和手机立即绑定

django2 登录的时候包错误 'WSGIRequest' object has no attribute 'session'

django2 登录的时候包错误 'WSGIRequest' object has no attribute 'session'

汪汪一只猫 2019-02-18 07:32:36
在登录的时候 调用django自带的login方法:from django.contrib.auth import login, authenticate user = authenticate(username=username, password=password)login(request, user)在这句话 的时候抛出了 'WSGIRequest' object has no attribute 'session' 的错误,网上查了 说是settings中 middle名字不对,但我查了一下我的是对的 名字是:MIDDLEWARE_CLASSES,求各位指点 我用的版本是 django2.1.1 谢谢各位 我的 classes是这样的:MIDDLEWARE_CLASSES = ( 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware', )
查看完整描述

1 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

在调用login(request, user)时,会去访问 request.session属性,
而request.session是在 django.contrib.sessions.middleware.SessionMiddleware 这个中间件初始化
所以问题是中间件没调用到, 导致request 没有 session这个属性
原因是在django2.0 中间件配置变量名是 MIDDLEWARE 不再是 MIDDLEWARE_CLASSES
所以正确配置是:

MIDDLEWARE = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
)
查看完整回答
反对 回复 2019-03-01
  • 1 回答
  • 0 关注
  • 531 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信