一、背景
最近在跟着網上教程學習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
,等後續找到原因再進行更新。