一、流程分析:
1.點(diǎn)擊忘記密碼====》forget.html頁面,輸入郵箱和驗(yàn)證碼,發(fā)送驗(yàn)證鏈接網(wǎng)址的郵件====》發(fā)送成功,跳到send_success.html提示
2.到郵箱里找到驗(yàn)證鏈接網(wǎng)址,訪問重設(shè)密碼網(wǎng)址reset.html===》重設(shè)密碼提交數(shù)據(jù),成功則返回首頁,失敗則返回錯誤信息
二、
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中,用于驗(yàn)證郵箱格式和驗(yàn)證碼 class ForgetForm(forms.Form): email = forms.EmailField(required = True ) captcha = CaptchaField(error_messages = { 'invalid' : '驗(yàn)證碼錯誤' }) #reset.html中,用于驗(yàn)證新設(shè)的密碼長度是否達(dá)標(biāo) 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中相關(guān)代碼:
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' ) #因?yàn)?lt;form>表單中的路徑要是確定的,所以post函數(shù)另外定義一個類來完成 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 >驗(yàn)證碼:</ span >{{ forget_form.captcha }}</ P > {% csrf_token %} < p >< input type = "submit" value = "確認(rèn)發(fā)送驗(yàn)證郵件" ></ 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 >發(fā)送郵件成功,快去郵箱查看吧!(收件箱沒有,垃圾箱一定有……)</ 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 >可以重新設(shè)置一個好記的新密碼啦!</ h1 > < form method = "post" action = "{% url 'modify' %}" > < P >< span >新密碼:</ span >< input type = "password" name = "newpwd1" placeholder = "至少6位" ></ P > < P >< span >確認(rèn)新密碼:</ span >< input type = "password" name = "newpwd2" placeholder = "至少6位" ></ P > {% csrf_token %} < input type = "hidden" name = "email" value = "{{ email }}" > < p >< input type = "submit" value = "確認(rèn)" ></ p > </ form > < h1 >{{ msg }}</ h1 > </ div > </ body > </ html > |
4.配置相關(guān)的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' ), ...... ] |
運(yùn)行項(xiàng)目,點(diǎn)擊 忘記密碼 鏈接(<a href="{% url 'forget_pwd' %}" rel="external nofollow" >忘記密碼</a>),就可以完成通過郵箱找回密碼的功能啦!
5.send_register_email()方法及其配置 詳見上一篇文章
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。
原文鏈接:http://www.cnblogs.com/xuepangzi/p/8847090.html