一、背景
最近在跟着网上教程学习django的天天生鲜项目,在用户登陆验证部分使用的是django内置的authenticate()
函数,发现authenticate()
函数一直返回None,我的django版本是1.11。感觉的这个函数的问题,最后在网上找到了答案,这里记录一下。
二、代码
class LoginView(View):
'''登录视图类'''
def get(self, request):
return render(request, 'user/login.html')
def post(self, request):
'''登陆校验'''
username = request.POST.get('username')
password = request.POST.get('pwd')
# 校验数据
if not all([username, password]):
return render(request, 'user/login.html', {'errmsg': '数据不完整'})
# 业务处理:登陆校验
"""
通过模型去查有没有这个用户
User.objects.get(username=username,password=password)
"""
# 使用django内置校验的函数authenticate
user = authenticate(username=username, password=password)
print(user)
if user is not None:
if user.is_active:
# 用户已激活,记录用户状态
login(request, user)
return redirect(reverse('goods:index'))
else:
# 用户未激活
return render(request, 'user/login.html', {'errmsg': '用户未激活'})
else:
# 用户名或密码错误
return render(request, 'user/login.html', {'errmsg': '用户名或密码错误'})
不光是1.11这个版本好像还有一些其他的版本也是有这个问题,解决方法是:
在settings.py
文件中添加:
AUTHENTICATION_BACKENDS = ['django.contrib.auth.backends.AllowAllUsersModelBackend']
就可以解决问题,具体原因还没有弄清楚,好像是自动关联is_active
,等后续找到原因再进行更新。