Django通用类视图实现忘记密码重置密码功能示例


Posted in Python onDecember 17, 2019

前言

在Django中有大量的通用类视图,例如ListView,DetailView,CreateView,UpdateView等等,将所有重复的增删改查代码抽象成一个通用类,只需要配置极少量的代码即可实现功能。

使用通用类视图完成找回密码功能

首先引入

from django.contrib.auth.views import PasswordResetView, PasswordResetConfirmView, \
 PasswordResetDoneView, PasswordChangeView, PasswordChangeDoneView, \
 PasswordResetCompleteView

配置如下:

class MyPasswordResetView(PasswordResetView):
 """重置密码视图"""
 template_name = 'users/registration/forget_pwd.html'
 form_class = ForgetForm
 success_url = reverse_lazy("users:password_reset_done")
 email_template_name = 'users/registration/password_reset_email.html'


class MyPasswordResetConfirmView(PasswordResetConfirmView):
 """重置密码页面,输入两次密码"""
 template_name = 'users/registration/password_change_form.html'
 success_url = reverse_lazy('users:password_reset_complete')


class MyPasswordResetDoneView(PasswordResetDoneView):
 """发送确认重置邮件"""
 template_name = 'users/registration/password_reset_done.html'


class MyPasswordResetCompleteView(PasswordResetCompleteView):
 """完成重置密码"""
 template_name = 'users/registration/password_change_done.html'

其中忘记密码,填写邮箱的模板forget_pwd.html模板如下:

<form method="post" class="form-validate" action="{% url 'users:password_reset' %}">
   <div class="form-group">
    <input id="login-username" type="text" name="email" required data-msg="请输入您的邮箱" class="input-material">
    <label for="login-username" class="label-material">邮箱</label>
    {% if form.errors %}
    <div style="color: red">邮箱输入错误</div>
    {% endif %}
   </div>

    {% csrf_token %}
    <button type="submit" id="login" href="#" rel="external nofollow" class="btn btn-primary">发送确认邮件</button>
   <!-- This should be submit button but I replaced it with <a> for demo purposes-->
   </form>

其中输入新密码模板password_change_form.html页面如下:

<form id="form" method="post">
 {% csrf_token %}
 {{ form|crispy }}
 <div class="form-group">
 <button type="submit" class="btn btn-primary button-submit">确认更改</button>
 </div>
</form>

其中重置密码邮件发送成功的模板password_reset_done.html如下:

<div class="col-lg-6 bg-white">
  <div class="form d-flex align-items-center">
  <div class="content">
   <h1>重置密码邮件发送成功!</h1>

  </div>
  </div>
 </div>

其中密码重置成功password_change_done.html如下:

<div class="container">
 <div class="row">
  <div class="col-md-6 offset-md-3">
  <h1>重置密码成功!</h1>
  <a href="{% url 'index' %}" rel="external nofollow" >回到首页</a>
  </div>
 </div>
 </div>

最后配置路由

path('password/reset/', view=MyPasswordResetView.as_view(), name='password_reset'), # password_reset
path('password/reset/done/', MyPasswordResetDoneView.as_view(), name='password_reset_done'), # password_reset_done

url(r'^reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',
 view=MyPasswordResetConfirmView.as_view(), name='password_reset_confirm'), # reset
path('reset/done/', MyPasswordResetCompleteView.as_view(), name='password_reset_complete'),

效果如下:

Django通用类视图实现忘记密码重置密码功能示例

Django通用类视图实现忘记密码重置密码功能示例

以上这篇Django通用类视图实现忘记密码重置密码功能示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python通过递归遍历出集合中所有元素的方法
Feb 25 Python
在Python程序中进行文件读取和写入操作的教程
Apr 28 Python
Python自动登录126邮箱的方法
Jul 10 Python
理解python正则表达式
Jan 15 Python
浅谈flask中的before_request与after_request
Jan 20 Python
Python进度条实时显示处理进度的示例代码
Jan 30 Python
python pandas中DataFrame类型数据操作函数的方法
Apr 08 Python
使用Python更换外网IP的方法
Jul 09 Python
Python turtle库绘制菱形的3种方式小结
Nov 23 Python
Python while true实现爬虫定时任务
Jun 08 Python
python支持多继承吗
Jun 19 Python
使用tkinter实现三子棋游戏
Feb 25 Python
Django集成celery发送异步邮件实例
Dec 17 #Python
python学生信息管理系统实现代码
Dec 17 #Python
pymysql模块的操作实例
Dec 17 #Python
Django异步任务线程池实现原理
Dec 17 #Python
python 求10个数的平均数实例
Dec 16 #Python
python 经典数字滤波实例
Dec 16 #Python
Python实现把类当做字典来访问
Dec 16 #Python
You might like
PHP中用header图片地址 简单隐藏图片源地址
2008/04/09 PHP
php 判断数组是几维数组
2013/03/20 PHP
php+ajax简单实现全选删除的方法
2016/12/06 PHP
浅谈laravel数据库查询返回的数据形式
2019/10/21 PHP
javascript forEach通用循环遍历方法
2010/10/11 Javascript
用js来解决ajax读取页面乱码
2010/11/28 Javascript
Javascript学习笔记之 对象篇(一) : 对象的使用和属性
2014/06/24 Javascript
jQuery使用之标记元素属性用法实例
2015/01/19 Javascript
JavaScript模拟实现继承的方法
2015/03/30 Javascript
JavaScript的removeChild()函数用法详解
2015/12/27 Javascript
Node.js实用代码段之获取Buffer对象字节长度
2016/03/17 Javascript
jQuery控制li上下循环滚动插件用法实例(附demo源码下载)
2016/05/28 Javascript
Bootstrap源码解读表单(2)
2016/12/22 Javascript
jQuery基本筛选选择器实例代码
2017/02/06 Javascript
JavaScript中无法通过div.style.left获取值的解决方法
2017/02/19 Javascript
Vue开发中整合axios的文件整理
2017/04/29 Javascript
js 判断一个数字是不是2的n次方幂的实例
2017/11/26 Javascript
详解nuxt路由鉴权(express模板)
2018/11/21 Javascript
layui(1.0.9)文件上传upload,前后端的实例代码
2019/09/26 Javascript
Vue中img的src是动态渲染时不显示的解决
2019/11/14 Javascript
echarts实现获取datazoom的起始值(包括x轴和y轴)
2020/07/20 Javascript
Python实现将DOC文档转换为PDF的方法
2015/07/25 Python
python实现网站的模拟登录
2016/01/04 Python
python下载文件记录黑名单的实现代码
2017/10/24 Python
django实现登录时候输入密码错误5次锁定用户十分钟
2017/11/05 Python
python制作英语翻译小工具代码实例
2019/09/09 Python
Python操作Sonqube API获取检测结果并打印过程解析
2019/11/27 Python
python对XML文件的操作实现代码
2020/03/27 Python
Original Penguin美国官网:布拉德皮特、强尼德普喜爱的服装品牌
2016/10/25 全球购物
Java方面的关于数组和继承的笔面试题
2015/09/18 面试题
母亲七十大寿答谢词
2014/01/18 职场文书
党员志愿者活动总结
2014/06/26 职场文书
2014年社区矫正工作总结
2014/11/18 职场文书
2015年超市收银员工作总结
2015/04/25 职场文书
基层医务人员三严三实心得体会
2016/01/05 职场文书
健身房被搭讪?用python写了个小米计时器助人为乐
2021/06/08 Python