1.urls.py文件html
urlpatterns = [ url(r'^admin/', admin.site.urls), url('^$',TemplateView.as_view(template_name="index.html"),name='index'), url(r'^login/$',views.User_login.as_view(),name='login' ), url(r'^reg/$',views.User_reg.as_view(),name='reg' ), url(r'^active/(?P<acctive_code>.*)/$',views.AciveUserView.as_view(),name='user_active'), url(r'^forget/$',views.ForgetPwdView.as_view(),name='forget_pwd'), #用戶忘記密碼url ]
2.forms.py文件前端
class ForgetForm(forms.Form): email = forms.EmailField(required=True) captcha = CaptchaField(error_messages={"invalid":"驗證碼錯誤"}) #直接引用
3.views.py文件dom
class ForgetPwdView(View): def get(self,request): forget_form = forms.ForgetForm() return render(request,'forgetpwd.html',{"forget_form":forget_form})
4.前端渲染的效果如圖所示函數
1.email_send.py文件post
def random_str(randomlength=8): str = '' chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz123456789' lengh = len(chars) - 1 random = Random() for i in range(randomlength): str+=chars[random.randint(0,lengh)] return str def send_register_email(email,send_type="register"): print("進去郵箱") email_record = EmailVerifyRecord() code =random_str(16) email_record.code = code email_record.email =email email_record.send_type = send_type email_record.save() ###發送郵件### email_title = "" #郵件的title email_body = "" #郵件的正文 if send_type == "register": email_title = "蘋果官網註冊激活連接" email_body = "請點擊下面的連接激活你的帳號:http://127.0.0.1:8000/active/{0}".format(code) send_status = send_mail(email_title,email_body,EMAIL_FROM,[email]) if send_status: pass elif send_type == "forget": #用戶忘記密碼 email_title = "蘋果官網重置密碼連接" email_body = "請點擊下面的連接重置你的密碼:http://127.0.0.1:8000/reset/{0}".format(code) send_status = send_mail(email_title,email_body,EMAIL_FROM,[email]) if send_status: pass
2.views.py文件ui
class ForgetPwdView(View): def get(self,request): forget_form = forms.ForgetForm() return render(request,'forgetpwd.html',{"forget_form":forget_form}) def post(self,request): forget_form = forms.ForgetForm(request.POST) if forget_form.is_valid(): email = request.POST.get("email",'') send_register_email(email,'forget') #發送重置密碼郵件 return render(request,'send_success.html') #該頁面用於提示用戶郵件發送成功 else: return render(request,'forgetpwd.html',{"forget_form":forget_form}) ###用來驗證郵箱後處理的視圖函數#### class ResetView(View): def get(self,request,active_code): all_records = models.EmailVerifyRecord.objects.filter(code=active_code) if all_records: for record in all_records: email = record.email #查找到驗證碼 return render(request,'pasword_reset.html',{"email":email}) #傳email的能夠判斷是哪一個用戶重置密碼須要在前端渲染一個隱藏的input框 return render(request,'login.html') ####post提交#### class ModifypwdView(View): def post(self,request): modify_form = forms.ModifyPwdForm(request.POST) if modify_form.is_valid(): pwd1 = request.POST.get("password1",'') pwd2 = request.POST.get("password2",'') email = request.POST.get("email","") if pwd1 != pwd2: return render(request,"password_reset.html",{"email":email,"msg":"密碼不一致"}) user = models.Userinfo.objects.get(email=email) user.password = make_password(pwd2) user.save() return render(request,'login.html') else: email = request.POST.get("email",'') return render(request,"password_reset.html",{"email":email,'modify_form':modify_form})
3.urls.py文件url
urlpatterns = [ url(r'^admin/', admin.site.urls), url('^$',TemplateView.as_view(template_name="index.html"),name='index'), url(r'^login/$',views.User_login.as_view(),name='login' ), url(r'^reg/$',views.User_reg.as_view(),name='reg' ), url(r'^active/(?P<acctive_code>.*)/$',views.AciveUserView.as_view(),name='user_active'), url(r'^forget/$',views.ForgetPwdView.as_view(),name='forget_pwd'), #用戶忘記密碼url url(r'^reset/(?P<acctive_code>.*)/$',views.AciveUserView.as_view(),name='user_reset'), #用來處理郵箱驗證後的重置url url(r'^modify_pwd/$',views.ModifyPwdView.as_view(),name='modify_pwd') #用來處理郵箱驗證中的POST提交的url ]
4.前端頁面code
前端頁面須要注意的urlorm