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正则表达式
Jan 15 Python
Python的Django应用程序解决AJAX跨域访问问题的方法
May 31 Python
再谈Python中的字符串与字符编码(推荐)
Dec 14 Python
python dict 字典 以及 赋值 引用的一些实例(详解)
Jan 20 Python
用python写扫雷游戏实例代码分享
May 27 Python
Python爬虫获取图片并下载保存至本地的实例
Jun 01 Python
Python中文件的写入读取以及附加文字方法
Jan 23 Python
python 二维数组90度旋转的方法
Jan 28 Python
Python中@property的理解和使用示例
Jun 11 Python
Win10 安装PyCharm2019.1.1(图文教程)
Sep 29 Python
Python 多线程之threading 模块的使用
Apr 14 Python
使用opencv-python如何打开USB或者笔记本前置摄像头
Jun 21 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
Godaddy空间Zend Optimizer升级方法
2010/05/10 PHP
PHP7安装Redis扩展教程【Linux与Windows平台】
2016/09/30 PHP
PHP使用DOM和simplexml读取xml文档的方法示例
2017/02/08 PHP
php 7新特性之类型申明详解
2017/06/06 PHP
php实现的生成迷宫与迷宫寻址算法完整实例
2017/11/06 PHP
jqPlot 基于jquery的画图插件
2011/04/26 Javascript
iframe 上下滚动条如何默认在下方实现原理
2012/12/10 Javascript
jcrop基本参数一览
2013/07/16 Javascript
Jquery的Tabs内容轮换效果实现代码,几行搞定
2014/02/12 Javascript
如何调试异步加载页面里包含的js文件
2014/10/30 Javascript
在linux中使用包管理器安装node.js
2015/03/13 Javascript
基于AngularJS+HTML+Groovy实现登录功能
2016/02/17 Javascript
基于Jquery插件实现跨域异步上传文件功能
2016/04/26 Javascript
js实现动态创建的元素绑定事件
2016/07/19 Javascript
EasyUI的DataGrid绑定Json数据源的示例代码
2017/12/16 Javascript
vue-cli webpack 引入jquery的方法
2018/01/10 jQuery
Angular5集成eventbus的示例代码
2018/07/19 Javascript
浅谈微信小程序之官方UI框架we-ui使用教程
2018/08/20 Javascript
Vue监听一个数组id是否与另一个数组id相同的方法
2018/09/26 Javascript
[01:38:19]夜魇凡尔赛茶话会 第五期
2021/03/11 DOTA
Python 条件判断的缩写方法
2008/09/06 Python
浅谈用Python实现一个大数据搜索引擎
2017/11/28 Python
Python cookbook(数据结构与算法)从字典中提取子集的方法示例
2018/03/22 Python
Python实现的括号匹配判断功能示例
2018/08/25 Python
python脚本之一键移动自定格式文件方法实例
2019/09/02 Python
python使用 request 发送表单数据操作示例
2019/09/25 Python
Python如何避免文件同名产生覆盖
2020/06/09 Python
html5实现输入框fixed定位在屏幕最底部兼容性
2020/07/03 HTML / CSS
学前教育教师求职自荐信
2013/09/22 职场文书
十八届三中全会报告学习材料
2014/02/17 职场文书
《月迹》教学反思
2014/02/19 职场文书
计算机求职自荐信范文
2014/04/19 职场文书
电子商务系毕业生自荐信
2014/05/29 职场文书
2015年社区科普工作总结
2015/05/13 职场文书
军训结束新闻稿
2015/07/17 职场文书
关于党风廉政建设宣传教育月的活动总结!
2019/08/08 职场文书