【忘记密码,通过邮件修改密码功能的实现】
1.发送邮件的email_send.py:添加发送模块
if send_type == "forget": email_title = "晖哥哥博客找回密码链接" email_body = "请点击下面的链接修改你密码(本链接30分钟内有效!): http://127.0.0.1:8000/user/reset/{0}".format(code) # 使用Django内置函数完成邮件发送。四个参数:主题,邮件内容,从哪里发,接受者list send_status = send_mail(email_title, email_body, EMAIL_FROM, [email]) # 如果发送成功 if send_status: pass
2.user/views.py 里新建申请修改密码的视图
创建申请找回密码的路由 #邮箱找回密码 def setpassword(request): # 如果是POST提交 if request.method == 'POST': # 将需要的字段提取出来 emails = request.POST['email'] #验证注册表里是不是有这个邮箱 user_email = User.objects.filter(email=emails).first() # 把邮箱写进表里,并启动发送邮箱验证码程序 if user_email: send_register_eamil(emails, 'forget') context = { 'message': "密码修改链接已经发送到%s请前往邮箱获取地址(24小时内有效)" % emails } return render(request, 'user/forget.html', context) else: context = { 'message': "你的邮箱%s有误或没有注册过,请直接前往注册" % emails } return render(request, 'user/forget.html', context) else: email_form = EmailForm() context = { 'message': email_form.errors } return render(request, 'user/forget.html', context)
3.前端页面的建立
forget.html
4.路由:
path('forget_email/', setpassword, name='forget_email'),#通过这个发送邮件给用户
5.修改视图的建立
#找回密码的处理视图 def new_password(request,code): if request.method == 'POST': #交于表单验证 new_paw = NewpasswordForm(request.POST) #验证通过,就获取出邮箱和密码 if new_paw.is_valid(): email = new_paw.cleaned_data['email'] password = new_paw.cleaned_data['password'] #找到这个用户 try: user = User.objects.get(email=email) user.password = password #跳转,让用户去登录 return redirect(reverse('login')) except: return HttpResponse('用户不存在,请核查') else: return HttpResponse('验证不通过!请按要求填入各项信息') else: #获取当前时间 today = datetime.datetime.now() # 如果验证码距离今天的日期超过30分,就视为链接过期,要求其重新获取 try: today_s = today - datetime.timedelta(minutes=30) # 查询验证码创建的时间 code_time = EmailVerifyRecord.objects.get(code=code) if code_time.send_time >= today_s : reg_form = NewpasswordForm(initial={'email':code_time.email}) return render(request, 'user/forget2.html', {'reg_form': reg_form}) except: return render(request,'user/xiugai_guoqi.html')
6.修改页面的建立
forget2.html
7.过期页面的建立,这些都和注册时一样的代码
xiugai_guoqi.html
8.url.py
path('reset/<code>', new_password, name='forget_reset'),#通过这个展示修改密码页面
0
登陆后方可评论