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: 找回密码相关推荐

  1. Django+xadmin打造在线教育平台(七)

    Django+xadmin打造在线教育平台(七)   代码 github下载 十.授课教师 10.1.讲师列表页 拷贝teacher-list.html和teacher-detail.html到tem ...

  2. Django+xadmin打造在线教育平台(十)

    目录 在线教育平台(一)      在线教育平台(二) 在线教育平台(三)      在线教育平台(四) 在线教育平台(五)      在线教育平台(六) 在线教育平台(七)      在线教育平台( ...

  3. django+xadmin在线教育平台(十二)

    6-4 用form实现登录-1 上面我们的用户登录的方法是基于函数来做的.本节我们做一个基于类方法的版本. 要求对类的继承有了解. 基础教程中基本上都是基于函数来做的,其实更推荐基于类来做.基于类可以 ...

  4. django+xadmin在线教育平台慕学网(二)

    三.xadmin后台管理 3.1 .xadmin的安装 github下在xadmin源码:下载地址 下载完成之后,解压复制xadmin文件夹 3.2.xadmin配置 (1)新建python pack ...

  5. Django搭建在线教育平台(一)

    一.环境搭建 安装mysql 安装python 安装navicat 二.虚拟环境virtualenv virtualenv优点: 使用不同应用开发环境独立 环境实际不影响其他应用,也不影响全局的Pyt ...

  6. 第三百七十七节,Django+Xadmin打造上线标准的在线教育平台—apps目录建立,以及数据表生成...

    第三百七十七节,Django+Xadmin打造上线标准的在线教育平台-apps目录建立,以及数据表生成 apps目录建立 我们创建一个apps目录,将所有的app放到apps目录里去,这样方便管理,也 ...

  7. 第三百九十二节,Django+Xadmin打造上线标准的在线教育平台—sql注入攻击,xss攻击,csrf攻击...

    第三百九十二节,Django+Xadmin打造上线标准的在线教育平台-sql注入攻击,xss攻击,csrf攻击 sql注入攻击 也就是黑客通过表单提交的地方,在表单里输入了sql语句,就是通过SQL语 ...

  8. 第三百八十九节,Django+Xadmin打造上线标准的在线教育平台—列表筛选结合分页...

    第三百八十九节,Django+Xadmin打造上线标准的在线教育平台-列表筛选结合分页 根据用户的筛选条件来结合分页 实现原理就是,当用户点击一个筛选条件时,通过get请求方式传参将筛选的id或者值, ...

  9. 第三百九十一节,Django+Xadmin打造上线标准的在线教育平台—404,403,500页面配置...

    第三百九十一节,Django+Xadmin打造上线标准的在线教育平台-404,403,500页面配置 路由映射 在全局也就是根目录里的urls.py里配置404路由映射 注意:不是写在urlpatte ...

最新文章

  1. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 注入工具收尾操作 | 关闭注入的动态库 | 恢复寄存器 | 脱离远程调试附着 )
  2. 解决WSL2中Vmmem内存占用过大问题
  3. VR开发中性能问题—OculusWaitForGPU
  4. POJ 3061 -- Subsequence(二分)
  5. 去除html,获取某个标签里面内容
  6. 框架升级后某个类型所在程序集发生转移,应用还能正常运行吗?
  7. jdbc连接mysql登录注册_jdbc+mysql+servlet+jsp实现用户注册与登录功能
  8. 独立站需要用到哪些营销手段?
  9. 10个最重要SQL Server事务日志神话
  10. 杭州街头惊现“梦想改造家”,ATM取款区变废为宝
  11. Mac桌面上找不到或无法显示USB问题
  12. 瑞友虚拟化系统搭建服务器,瑞友云电脑虚拟化系统 | 瑞友天翼-应用虚拟化|远程接入|桌面虚拟化|国内虚拟化整体解决方案领导者...
  13. python基础教程菜鸟教程pdf-菜鸟教程 python pdf/Python菜鸟教程怎么样
  14. cad黑色背景变成白色_学会了、让你前程似锦的CAD完整版教程
  15. 给图片加ALT属性是个什么意思?有什么优点呢
  16. package.json文件^和~区别
  17. 下行控制信息 - 其他用途的DCI
  18. 基于单片机多功能万年历系统毕业设计(完整资料)
  19. ios安装python的步骤,iOS常见砸壳方法
  20. 数据库索引,到底是什么做的?-- 转自沈剑公众号

热门文章

  1. iOS数据存储简要笔记
  2. win7启动后报丢失nscmk.dll解决解决方式
  3. 关于ThinkPHP的一些编程技巧
  4. Java编程中“为了性能”需做的26件事(转)
  5. 常用JS图片滚动(无缝、平滑、上下左右滚动)代码大全
  6. XAMPP维基百科,自由的百科全书
  7. OpenCV的示例程序在哪里?
  8. 2021年计算机专业工作规划,2021年小学电脑室工作计划
  9. springMVC乱码问题
  10. 让Oracle SQL Developer显示的时间包含时分秒