Django打造在线教育平台_day_4: 找回密码
生活随笔
收集整理的這篇文章主要介紹了
Django打造在线教育平台_day_4: 找回密码
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1、form.py驗證輸入
from django import forms from captcha.fields import CaptchaFieldclass ForgetForm(forms.Form):"""找回密碼驗證碼"""email = forms.EmailField(required=True)captcha = CaptchaField(error_messages={'invalid': u'驗證碼錯誤'}) # 自定義錯誤提示信息class ModifyPwdForm(forms.Form):"""重置密碼"""password1 = forms.CharField(required=True, min_length=8) # 最小長度8password2 = forms.CharField(required=True, min_length=8) # 最小長度82、utils/email_send.py實現(xiàn)找回密碼郵件發(fā)送功能
from random import Random from django.core.mail import send_mail #發(fā)送郵件模塊from users.models import EmailVerifyRecord from MxOnline.settings import EMAIL_FROMdef random_str(randomlength=8):"""生成隨機字符串"""str = ''chars = 'AaBbCcDdEdFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789'length = len(chars) - 1random = Random()for i in range(randomlength):str += chars[random.randint(0,length)]return strdef send_register_email(email, send_type='register'):email_record = EmailVerifyRecord()code = random_str(16) # 16位長度的隨機字符串email_record.code = codeemail_record.email = emailemail_record.send_type = send_typeemail_record.save()email_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]) # 發(fā)送郵件if send_status:passelif 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]) # 發(fā)送郵件if send_status:pass3、實現(xiàn)重置密碼views.py
from django.shortcuts import render from django.views.generic.base import View from django.contrib.auth.hashers import make_password # 對密碼加密模塊from .models import UserProfile, EmailVerifyRecord from .forms import ForgetForm, ModifyPwdForm from users.utils.email_send import send_register_emailclass ForgetPwdView(View):def get(self, request):forget_form = ForgetForm()return render(request, 'forgetpwd.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, 'forgetpwd.html', {'forget_form': forget_form})class ResetView(View):"""密碼找回的View"""def get(self, request, active_code):all_records = EmailVerifyRecord.objects.filter(code=active_code)if all_records:for record in all_records:email = record.emailreturn render(request, "password_reset.html", {'email': email}) #跳轉(zhuǎn)到修改密碼頁面else:# active_fail.html在templates中新建的一個文件body中就一個<p>鏈接失效!</p>return render(request, "active_fail.html", {})return render(request, "login.html", {})class ModifyPwdView(View):"""密碼重置"""def post(self, request):modify_form = 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 = UserProfile.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, 'msg': modify_form})4、urls.py
from users.views import ForgetPwdView, ResetView, ModifyPwdViewurlpatterns = [url(r'^forget/$', ForgetPwdView.as_view(), name='forget_pwd'), # 忘記密碼鏈接url(r'^reset/(?P<active_code>.*)/$', ResetView.as_view(), name='reset_pwd'), # 重置密碼鏈接url(r'^modify_pwd/$', ModifyPwdView.as_view(), name='modify_pwd'), # 重置密碼鏈接 ]5、html頁面修改
轉(zhuǎn)載于:https://www.cnblogs.com/jp-mao/p/7077158.html
總結(jié)
以上是生活随笔為你收集整理的Django打造在线教育平台_day_4: 找回密码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 音乐震动条
- 下一篇: 【实例】去哪儿搜索实例实现