需求
流程
- 视图继承LoginMixin检验用户是否登录
- 获取参数
2.1 获取旧密码和两次输入的新密码- 校验参数
3.1 检验参数是否都存在
3.2 检验新密码是否与旧密码相等
3.3 检验两次输入新密码是否一致
3.4 正则检验三次输入密码格式是否正确- 检验输入的旧密码是否是数据库中正确的密码
用户对象.set_passwrod(用户输入的新密码)
方法更换密码- 保存到数据库
- 删除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