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中尾递归用法实例详解
Apr 28 Python
Python编写电话薄实现增删改查功能
May 07 Python
PyCharm代码格式调整方法
May 23 Python
python实现任意位置文件分割的实例
Dec 14 Python
opencv实现简单人脸识别
Feb 19 Python
在tensorflow中实现屏蔽输出的log信息
Feb 04 Python
python logging.info在终端没输出的解决
May 12 Python
在python中使用pyspark读写Hive数据操作
Jun 06 Python
python文件操作seek()偏移量,读取指正到指定位置操作
Jul 05 Python
如何基于matlab相机标定导出xml文件
Nov 02 Python
Python实现Kerberos用户的增删改查操作
Dec 14 Python
python 三边测量定位的实现代码
Apr 22 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
dede3.1分页文字采集过滤规则详说(图文教程)续四
2007/04/03 PHP
php侧拉菜单 漂亮,可以向右或者向左展开,支持FF,IE
2009/10/15 PHP
php设计模式之单例模式代码
2016/06/11 PHP
PHP使用Redis长连接的方法详解
2018/02/12 PHP
在JS中如何调用JSP中的变量
2014/01/22 Javascript
JavaScript 对象字面量讲解
2016/06/06 Javascript
JS中Json数据的处理和解析JSON数据的方法详解
2016/06/29 Javascript
JavaScript实现前端分页控件
2017/04/19 Javascript
Node.js开发第三方微信公众平台
2017/06/05 Javascript
JavaScript数组的5种迭代方法
2017/09/29 Javascript
JavaScript实现计算圆周率到小数点后100位的方法示例
2018/05/08 Javascript
小程序tab页无法传递参数的方法
2018/08/03 Javascript
Nginx设置为Node.js的前端服务器方法总结
2019/03/27 Javascript
[44:50]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 TNC vs VG
2018/04/02 DOTA
[02:07]2018DOTA2亚洲邀请赛主赛事第三日五佳镜头 fy极限反杀
2018/04/06 DOTA
Python不规范的日期字符串处理类
2014/06/10 Python
python logging类库使用例子
2014/11/22 Python
Python实现的简单文件传输服务器和客户端
2015/04/08 Python
Python打印斐波拉契数列实例
2015/07/07 Python
Python中max函数用法实例分析
2015/07/17 Python
Python实现字典按照value进行排序的方法分析
2017/12/23 Python
Python实现的多进程和多线程功能示例
2018/05/29 Python
python操作excel的方法(xlsxwriter包的使用)
2018/06/11 Python
python实现点击按钮修改数据的方法
2019/07/17 Python
Python使用docx模块实现刷题功能代码
2020/02/13 Python
python中wx模块的具体使用方法
2020/05/15 Python
CSS3 新增选择器的实例
2019/11/13 HTML / CSS
HTML5 3D书本翻页动画的实现示例
2019/08/28 HTML / CSS
高校生生产实习自我鉴定
2013/09/21 职场文书
学校门卫工作职责
2013/12/07 职场文书
岗位标兵事迹材料
2014/05/17 职场文书
安全演讲稿开场白
2014/08/25 职场文书
学校运动会报道稿
2014/09/23 职场文书
反腐倡廉主题教育活动总结
2015/05/07 职场文书
总结Java对象被序列化的两种方法
2021/06/30 Java/Android
nginx服务器的下载安装与使用详解
2021/08/02 Servers