關於部分版本django用戶驗證時authenticate()函數一直返回None的解決方法

一、背景

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章