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使用PyFetion来发送短信的例子
Apr 22 Python
Python语言实现机器学习的K-近邻算法
Jun 11 Python
Pycharm学习教程(6) Pycharm作为Vim编辑器使用
May 03 Python
Python操作MySQL模拟银行转账
Mar 12 Python
python3.6使用pymysql连接Mysql数据库
May 25 Python
PyCharm在新窗口打开项目的方法
Jan 17 Python
WxPython建立批量录入框窗口
Feb 27 Python
PyCharm下载和安装详细步骤
Dec 17 Python
Tensorflow获取张量Tensor的具体维数实例
Jan 19 Python
自定义Django Form中choicefield下拉菜单选取数据库内容实例
Mar 13 Python
python操作微信自动发消息的实现(微信聊天机器人)
Jul 14 Python
Python按顺序遍历并读取文件夹中文件
Apr 29 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
用文本文件制作留言板提示(上)
2006/10/09 PHP
PHP仿盗链代码
2012/06/03 PHP
PHP的异常处理类Exception的使用及说明
2012/06/13 PHP
PHP三种方式实现链式操作详解
2017/01/21 PHP
利用Dojo和JSON建立无限级AJAX动态加载的功能模块树
2007/03/24 Javascript
Javascript valueOf 使用方法
2008/12/28 Javascript
Extjs 几个方法的讨论
2010/01/28 Javascript
使用jquery读取html5 localstorage的值的方法
2013/01/04 Javascript
input输入框的自动匹配(原生代码)
2013/03/19 Javascript
Jquery 复选框取值兼容FF和IE8(测试有效)
2013/10/29 Javascript
js跑步算法的实现代码
2013/12/04 Javascript
JavaScript cookie的设置获取删除详解
2014/02/11 Javascript
JS制作适用于手机和电脑的通知信息效果
2016/10/28 Javascript
老生常谈javascript中逻辑运算符&amp;&amp;和||的返回值问题
2017/04/13 Javascript
bootstrap-table实现表头固定以及列固定的方法示例
2019/03/07 Javascript
从理论角度讨论JavaScript闭包
2019/04/03 Javascript
jQuery实现可以扩展的日历
2020/12/01 jQuery
python实现从web抓取文档的方法
2014/09/26 Python
用Python将动态GIF图片倒放播放的方法
2016/11/02 Python
vscode 远程调试python的方法
2017/12/01 Python
python实现梯度下降算法
2020/03/24 Python
python3去掉string中的标点符号方法
2019/01/22 Python
python实现浪漫的烟花秀
2019/01/30 Python
Python3中列表list合并的四种方法
2019/04/19 Python
Python3 合并二叉树的实现
2019/09/30 Python
往来会计岗位职责
2013/12/19 职场文书
《孔子游春》教学反思
2014/02/25 职场文书
初三班主任寄语大全
2014/04/04 职场文书
健康教育评估方案
2014/05/25 职场文书
干部个人考察材料
2014/12/24 职场文书
博士生专家推荐信
2015/03/25 职场文书
公司借款担保书
2015/09/22 职场文书
2016年党建工作简报
2015/11/26 职场文书
Python基于百度AI实现抓取表情包
2021/06/27 Python
Python OpenCV之常用滤波器使用详解
2022/04/07 Python
Java 轮询锁使用时遇到问题
2022/05/11 Java/Android