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 相关文章推荐
windows下Python实现将pdf文件转化为png格式图片的方法
Jul 21 Python
python实现上传下载文件功能
Nov 19 Python
Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例
Aug 31 Python
对Python中list的倒序索引和切片实例讲解
Nov 15 Python
python钉钉机器人运维脚本监控实例
Feb 20 Python
Python转换时间的图文方法
Jul 01 Python
python实现输入任意一个大写字母生成金字塔的示例
Oct 27 Python
Python模块的制作方法实例分析
Dec 21 Python
关于Python Tkinter Button控件command传参问题的解决方式
Mar 04 Python
Python实现子类调用父类的初始化实例
Mar 12 Python
新手学python应该下哪个版本
Jun 11 Python
完美处理python与anaconda环境变量的冲突问题
Apr 07 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
ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单
2014/05/15 PHP
php获取apk包信息的方法
2014/08/15 PHP
destoon实现会员商铺中指定会员或会员组投放广告的方法
2014/08/21 PHP
php中unserialize返回false的解决方法
2014/09/22 PHP
ExtJS 设置级联菜单的默认值
2010/06/13 Javascript
javascript 系统文件夹文件操作及参数介绍
2013/01/08 Javascript
浅析Javascript使用include/require
2013/11/13 Javascript
JS中typeof与instanceof之间的区别总结
2013/11/14 Javascript
运用JQuery的toggle实现网页加载完成自动弹窗
2014/03/18 Javascript
jquery获得同源iframe内body下标签的值的方法
2014/09/25 Javascript
javascript面向对象快速入门实例
2015/01/13 Javascript
JavaScript使用concat连接数组的方法
2015/04/06 Javascript
jquery分析文本里url或邮件地址为真实链接的方法
2015/06/20 Javascript
JavaScript实现将数组数据添加到Select下拉框的方法
2015/08/21 Javascript
分享JS代码实现鼠标放在输入框上输入框和图片同时更换样式
2016/09/01 Javascript
JavaScript中String对象的方法介绍
2017/01/04 Javascript
vue的基本用法与常见指令
2017/08/15 Javascript
JS随机数产生代码分享
2018/02/24 Javascript
JavaScript对象访问器Getter及Setter原理解析
2020/12/08 Javascript
Python自动化运维和部署项目工具Fabric使用实例
2016/09/18 Python
python访问抓取网页常用命令总结
2017/04/11 Python
python 定时修改数据库的示例代码
2018/04/08 Python
Python pyinotify模块实现对文档的实时监控功能方法
2018/10/13 Python
python and or用法详解
2019/06/26 Python
pandas 像SQL一样使用WHERE IN查询条件说明
2020/06/05 Python
python利用platform模块获取系统信息
2020/10/09 Python
Grid 宫格常用布局的实现
2020/01/10 HTML / CSS
英国手机零售商:Carphone Warehouse
2018/06/06 全球购物
婚礼主持结束词
2014/03/13 职场文书
银行求职信
2014/05/31 职场文书
团队激励口号
2014/06/06 职场文书
党的群众路线学习笔记
2014/11/06 职场文书
狮子林导游词
2015/02/03 职场文书
老干部座谈会主持词
2015/07/03 职场文书
Lombok的详细使用及优缺点总结
2021/07/15 Java/Android
解决persistence.xml配置文件修改存放路径的问题
2022/02/24 Java/Android