关于部分版本django用户验证时authenticate()函数一直返回None的解决方法

11 篇文章 0 订阅
9 篇文章 0 订阅

一、背景

最近在跟着网上教程学习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,等后续找到原因再进行更新。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值