一、流程分析:
1.点击忘记密码====》forget.html页面,输入邮箱和验证码,发送验证链接网址的邮件====》发送成功,跳到send_success.html提示
2.到邮箱里找到验证链接网址,访问重设密码网址reset.html===》重设密码提交数据,成功则返回首页,失败则返回错误信息
二、
1.users/forms.py文件中
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
from captcha.fields import CaptchaField ....... #forget.html中,用于验证邮箱格式和验证码 class ForgetForm(forms.Form): email = forms.EmailField(required = True ) captcha = CaptchaField(error_messages = { 'invalid' : '验证码错误' }) #reset.html中,用于验证新设的密码长度是否达标 class ResetForm(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中相关代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
...... from django.shortcuts import render,redirect from django.http import HttpResponse from users.form import ForgetForm,ResetForm from .models import UserProfile from django.contrib.auth.hashers import make_password from apps.utils.email_send import send_register_email from .models import EmailVerifyRecord ...... class ForgetPwdView(View): '''忘记密码''' def get( self ,request): forget_form = ForgetForm() return render(request, 'forget.html' ,{ 'forget_form' :forget_form}) def post( self ,request): forget_form = 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, 'forget.html' ,{ 'forget_form' :forget_form}) class ResetView(View): '''重置密码''' def get( self ,request,active_code): record = EmailVerifyRecord.objects. filter (code = active_code) print (record) if record: for i in record: email = i.email is_register = UserProfile.objects. filter (email = email) if is_register: return render(request, 'pwd_reset.html' ,{ 'email' :email}) return redirect( 'index' ) #因为<form>表单中的路径要是确定的,所以post函数另外定义一个类来完成 class ModifyView(View): """重置密码post部分""" def post( self ,request): reset_form = ResetForm(request.POST) if reset_form.is_valid(): pwd1 = request.POST.get( 'newpwd1' ,'') pwd2 = request.POST.get( 'newpwd2' ,'') email = request.POST.get( 'email' ,'') if pwd1! = pwd2: return render(request, 'pwd_reset.html' ,{ 'msg' : '密码不一致!' }) else : user = UserProfile.objects.get(email = email) user.password = make_password(pwd2) user.save() return redirect( 'index' ) else : email = request.POST.get( 'email' ,'') return render(request, 'pwd_reset.html' ,{ 'msg' :reset_form.errors}) |
3.新建forget.html, success_send.html, pwd_reset.html
#forget.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
<!DOCTYPE html> {% load staticfiles %} < html lang = "en" > < head > < meta charset = "UTF-8" > < title >忘记密码</ title > < style > .out{ width: 500px; height: 900px; margin: 0 auto; margin-top: 100px; } </ style > </ head > < body > < div class = "out" > < h1 >真粗心,忘了密码吧?快通过邮箱找回密码吧!</ h1 > < form method = "post" action = "{% url 'forget_pwd' %}" > < P >< span >邮箱:</ span >< input type = "text" name = "email" ></ P > < P >< span >验证码:</ span >{{ forget_form.captcha }}</ P > {% csrf_token %} < p >< input type = "submit" value = "确认发送验证邮件" ></ p > </ form > < h1 >{{ forget_form.errors }}</ h1 > </ div > </ body > </ html > |
#success_send.html
1
2
3
4
5
6
7
8
9
10
|
<!DOCTYPE html> < html lang = "en" > < head > < meta charset = "UTF-8" > < title >Title</ title > </ head > < body > < h1 >发送邮件成功,快去邮箱查看吧!(收件箱没有,垃圾箱一定有……)</ h1 > </ body > </ html > |
#pwd_reset.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
<!DOCTYPE html> {% load staticfiles %} < html lang = "en" > < head > < meta charset = "UTF-8" > < title >重置密码</ title > < style > .out{ width: 500px; height: 900px; margin: 0 auto; margin-top: 100px; } </ style > </ head > < body > < div class = "out" > < h1 >可以重新设置一个好记的新密码啦!</ h1 > < form method = "post" action = "{% url 'modify' %}" > < P >< span >新密码:</ span >< input type = "password" name = "newpwd1" placeholder = "至少6位" ></ P > < P >< span >确认新密码:</ span >< input type = "password" name = "newpwd2" placeholder = "至少6位" ></ P > {% csrf_token %} < input type = "hidden" name = "email" value = "{{ email }}" > < p >< input type = "submit" value = "确认" ></ p > </ form > < h1 >{{ msg }}</ h1 > </ div > </ body > </ html > |
4.配置相关的urls.py:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
from users.views import ForgetPwdView,ResetView,ModifyView ...... urlpatterns = [ ..... #忘记密码 path( 'forget/' ,ForgetPwdView.as_view(),name = 'forget_pwd' ), #重置密码 path( 'reset/<str:active_code>' ,ResetView.as_view(),name = 'reset' ), path( 'modify/' ,ModifyView.as_view(),name = 'modify' ), ...... ] |
运行项目,点击 忘记密码 链接(<a href="{% url 'forget_pwd' %}" rel="external nofollow" >忘记密码</a>),就可以完成通过邮箱找回密码的功能啦!
5.send_register_email()方法及其配置 详见上一篇文章
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://www.cnblogs.com/xuepangzi/p/8847090.html