修改密码(作业)
修改密码接口设计和定义
1.请求方式
| 选项 | 方案 |
|---|---|
| 请求方法 | PUT |
| 请求地址 | /password/ |
2.请求参数:JSON
| 参数名 | 类型 | 是否必传 | 说明 |
|---|---|---|---|
| old_password | string | 是 | 老密码 |
| new_password | string | 是 | 新密码 |
| new_password2 | string | 是 | 确认的新密码 |
3.响应结果:JSON
| 字段 | 说明 |
|---|---|
| code | 状态码 |
| errmsg | 错误信息 |
1. 修改密码后端逻辑
提示:
- 修改密码前需要校验原始密码是否正确,以校验修改密码的用户身份。
- 如果原始密码正确,再将新的密码赋值给用户。
- 我们在 users.views.py 文件中添加如下代码:
class ChangePasswordView(LoginRequiredMixin, View):
"""修改密码"""
def put(self, request):
"""实现修改密码逻辑"""
# 接收参数
dict = json.loads(request.body.decode())
old_password = dict.get('old_password')
new_password = dict.get('new_password')
new_password2 = dict.get('new_password2')
# 校验参数
if not all([old_password, new_password, new_password2]):
return http.JsonResponse({'code':400,
'errmsg':'缺少必传参数'})
result = request.user.check_password(old_password)
if not result:
return http.JsonResponse({'code':400,
'errmsg':'原始密码不正确'})
if not re.match(r'^[0-9A-Za-z]{8,20}$', new_password):
return http.JsonResponse({'code':400,
'errmsg':'密码最少8位,最长20位'})
if new_password != new_password2:
return http.JsonResponse({'code':400,
'errmsg':'两次输入密码不一致'})
# 修改密码
try:
request.user.set_password(new_password)
request.user.save()
except Exception as e:
return http.JsonResponse({'code':400,
'errmsg':'修改密码失败'})
# 清理状态保持信息
logout(request)
response = http.JsonResponse({'code':0,
'errmsg':'ok'})
response.delete_cookie('username')
# # 响应密码修改结果:重定向到登录界面
return response