欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

Django打造在线教育平台_day_4: 找回密码

发布时间:2025/7/25 编程问答 37 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Django打造在线教育平台_day_4: 找回密码 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

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) # 最小长度8

2、utils/email_send.py实现找回密码邮件发送功能

from random import Random from django.core.mail import send_mail #发送邮件模块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]) # 发送邮件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]) # 发送邮件if send_status:pass

3、实现重置密码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}) #跳转到修改密码页面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页面修改

转载于:https://www.cnblogs.com/jp-mao/p/7077158.html

总结

以上是生活随笔为你收集整理的Django打造在线教育平台_day_4: 找回密码的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。