Django实战----用户修改密码

需求

在这里插入图片描述

流程

  1. 视图继承LoginMixin检验用户是否登录
  2. 获取参数
    2.1 获取旧密码和两次输入的新密码
  3. 校验参数
    3.1 检验参数是否都存在
    3.2 检验新密码是否与旧密码相等
    3.3 检验两次输入新密码是否一致
    3.4 正则检验三次输入密码格式是否正确
  4. 检验输入的旧密码是否是数据库中正确的密码
  5. 用户对象.set_passwrod(用户输入的新密码)方法更换密码
  6. 保存到数据库
  7. 删除cookie中的sessionid和cookie中的username 相当于退出重新登录

Django自带的方法判断密码是否正确


Boolean = check_password(参数1为密码明文,参数2为数据库中加密的密码)

返回布尔值,为True则是一样的反之为False

用户对象.set_password(密码明文)

这个方法为Django自带的加密密码存入数据库

代码

class UpdatePasswordView(LoginMixin, View):
    def put(self, request):
        user = request.user

        password_dict = json.loads(request.body)

        new_password = password_dict.get('new_password')
        new_password2 = password_dict.get('new_password2')
        old_password = password_dict.get('old_password')

        if not all([new_password, new_password2, old_password]):
            return JsonResponse({'code': 400, 'errmsg': '参数错误'})

        if old_password == new_password:
            return JsonResponse({'code': 400, 'errmsg': '设置的新密码不可以和最近使用的一样'})

        if new_password != new_password2:
            return JsonResponse({'code': 400, 'errmsg': '两次密码不一致'})

        if not re.match(r'^[0-9A-Za-z]{8,20}$', new_password) and not re.match(r'^[0-9A-Za-z]{8,20}$',
                                                                               new_password2) and re.match(
            r'^[0-9A-Za-z]{8,20}$', old_password):
            return JsonResponse({'code': 400, 'errmsg': '密码格式不正确'})

        is_true_password = check_password(old_password, user.password)
        if not is_true_password:
            return JsonResponse({'code': 400, 'errmsg': '当前密码输入不正确'})

        user.set_password(new_password)
        user.save()

        logout(request)
        ret = JsonResponse({'code': 0, 'errmsg': 'ok'})
        ret.delete_cookie('username')
        return ret

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值