修改密码
使用forms表单验证方式:
forms.py
class ChangePasswordForm(forms.Form):
old_password = forms.CharField(max_length=20, min_length=8, required=True, error_messages={
"max_length": "用户长度最长为20", "min_length": "用户名最少长度为8", "required": "密码必填"})
new_password = forms.CharField(max_length=20, min_length=8, required=True, error_messages={
"max_length": "用户长度最长为20", "min_length": "用户名最少长度为8", "required": "密码必填"})
new_password2 = forms.CharField(max_length=20, min_length=8, required=True, error_messages={
"max_length": "用户长度最长为20", "min_length": "用户名最少长度为8", "required": "密码必填"})
def clean(self):
cleaned_data = super().clean()
old_password = cleaned_data.get('old_password')
new_password = cleaned_data.get('new_password')
new_password2 = cleaned_data.get('new_password2')
if old_password == new_password:
raise forms.ValidationError('新旧密码不允许相同')
if new_password != new_password2:
raise forms.ValidationError('两次密码输入不一致')
return cleaned_data
views.py
class ChangePasswordView(View):
"""修改密码"""
def get(self, request):
'''展示修改密码界面'''
return render(request, 'user_center_pass.html')
def post(self, request):
'''实现修改密码逻辑'''
# 接收参数
ChangePassword_form = ChangePasswordForm(request.POST)
if ChangePassword_form.is_valid():
old_password = ChangePassword_form.cleaned_data.get('old_password')
new_password = ChangePassword_form.cleaned_data.get('new_password')
new_password2 = ChangePassword_form.cleaned_data.get('new_password2')
# 校验参数
if not all([old_password, new_password, new_password2]):
return http.HttpResponseForbidden('缺少必传参数')
try:
result = request.user.check_password(old_password)
if not result:
return render(request, 'user_center_pass.html', {
'origin_password_errmsg': '原始密码错误'})
except Exception as e:
logger.error(e)
return render(request, 'user_center_pass.html', {
'origin_password_errmsg': '原始密码错误'})
if not re.match(r'^[0-9A-Za-z]{8,20}$', new_password):
return http.HttpResponseForbidden('密码最少8位,最多20位')
if new_password != new_password2:
return http.HttpResponseForbidden('两次输入的密码不一致')
# 修改秘密
try:
request.user.set_password(new_password)
request.user.save()
except Exception as e:
logger.error(e)
return render(request, 'user_center_pass.html', {
'change_pwd_errmsg': '修改密码失败'})
# 清理状态保持信息
logout(request)
response = redirect(reverse('users:login'))
response.delete_cookie('username')
# 响应密码修改结果:重定向到登录界面
return response
不使用forms表单验证方式:POST.get
class ChangePasswordView(LoginRequiredMixin, View):
"""修改密码"""
def get(self, request):
"""展示修改密码界面"""
return render(request, 'user_center_pass.html')
def post(self, request):
"""实现修改密码逻辑"""
# 接收参数
old_password = request.POST.get('old_password')
new_password = request.POST.get('new_password')
new_password2 = request.POST.get('new_password2')
# 校验参数
if not all([old_password, new_password, new_password2]):
return http.HttpResponseForbidden('缺少必传参数')
try:
result = request.user.check_password(old_password)
if not result:
return render(request, 'user_center_pass.html', {
'origin_password_errmsg': '原始密码错误'})
except Exception as e:
logger.error(e)
return render(request, 'user_center_pass.html', {
'origin_pwd_errmsg':'原始密码错误'})
if not re.match(r'^[0-9A-Za-z]{8,20}$', new_password):
return http.HttpResponseForbidden('密码最少8位,最长20位')
if new_password != new_password2:
return http.HttpResponseForbidden('两次输入的密码不一致')
# 修改密码
try:
request.user.set_password(new_password)
request.user.save()
except Exception as e:
logger.error(e)
return render(request, 'user_center_pass.html', {
'change_pwd_errmsg': '修改密码失败'})
# 清理状态保持信息
logout(request)
response = redirect(reverse('users:login'))
response.delete_cookie('username')
# # 响应密码修改结果:重定向到登录界面
return response