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') #因为