django 开发忘记密码通过邮箱找回功能示例
一、流程分析:
1.点击忘记密码====》forget.html页面,输入邮箱和验证码,发送验证链接网址的邮件====》发送成功,跳到send_success.html提示
2.到邮箱里找到验证链接网址,访问重设密码网址reset.html===》重设密码提交数据,成功则返回首页,失败则返回错误信息
二、
1.users/forms.py文件中
fromdjangoimportforms
fromcaptcha.fieldsimportCaptchaField
.......
#forget.html中,用于验证邮箱格式和验证码
classForgetForm(forms.Form):
email=forms.EmailField(required=True)
captcha=CaptchaField(error_messages={'invalid':'验证码错误'})
#reset.html中,用于验证新设的密码长度是否达标
classResetForm(forms.Form):
newpwd1=forms.CharField(required=True,min_length=6,error_messages={'required':'密码不能为空.','min_length':"至少6位"})
newpwd2=forms.CharField(required=True,min_length=6,error_messages={'required':'密码不能为空.','min_length':"至少6位"})
2.users/views.py中相关代码:
......
fromdjango.shortcutsimportrender,redirect
fromdjango.httpimportHttpResponse
fromusers.formimportForgetForm,ResetForm
from.modelsimportUserProfile
fromdjango.contrib.auth.hashersimportmake_password
fromapps.utils.email_sendimportsend_register_email
from.modelsimportEmailVerifyRecord
......
classForgetPwdView(View):
'''忘记密码'''
defget(self,request):
forget_form=ForgetForm()
returnrender(request,'forget.html',{'forget_form':forget_form})
defpost(self,request):
forget_form=ForgetForm(request.POST)
ifforget_form.is_valid():
email=request.POST.get('email','')
send_register_email(email,'forget')
returnrender(request,'send_success.html')
else:
returnrender(request,'forget.html',{'forget_form':forget_form})
classResetView(View):
'''重置密码'''
defget(self,request,active_code):
record=EmailVerifyRecord.objects.filter(code=active_code)
print(record)
ifrecord:
foriinrecord:
email=i.email
is_register=UserProfile.objects.filter(email=email)
ifis_register:
returnrender(request,'pwd_reset.html',{'email':email})
returnredirect('index')
#因为