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上使用virtualenv搭建Python+Flask开发环境
Jun 07 Python
python 实现调用子文件下的模块方法
Dec 07 Python
python处理大日志文件
Jul 23 Python
在keras中获取某一层上的feature map实例
Jan 24 Python
Python使用qrcode二维码库生成二维码方法详解
Feb 17 Python
python数据库操作mysql:pymysql、sqlalchemy常见用法详解
Mar 30 Python
jupyter notebook 恢复误删单元格或者历史代码的实现
Apr 17 Python
常用的10个Python实用小技巧
Aug 10 Python
python实现梯度下降算法的实例详解
Aug 17 Python
python Tornado框架的使用示例
Oct 19 Python
python解压zip包中文乱码解决方法
Nov 27 Python
基于Python实现股票收益率分析
Apr 02 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中对数据库操作的封装
2006/10/09 PHP
php格式化日期和时间格式化示例分享
2014/02/24 PHP
Laravel中的Blade模板引擎示例详解
2017/10/10 PHP
Laravel框架实现的上传图片到七牛功能详解
2019/09/06 PHP
Laravel 实现添加多语言提示信息
2019/10/25 PHP
基于PHP实现用户登录注册功能的详细教程
2020/08/04 PHP
复制小说文本时出现的随机乱码的去除方法
2010/09/07 Javascript
web css实现整站样式互相切换
2013/10/29 Javascript
js转义字符介绍
2013/11/05 Javascript
javascript利用apply和arguments复用方法
2013/11/25 Javascript
JQuery实现table行折叠效果以JSON做数据源
2014/05/26 Javascript
Node.js如何自动审核团队的代码
2016/07/20 Javascript
Google 地图获取API Key详细教程
2016/08/06 Javascript
Bootstrap企业网站实战项目4
2016/10/14 Javascript
Angular 2 利用Router事件和Title实现动态页面标题的方法
2017/08/23 Javascript
react.js 父子组件数据绑定实时通讯的示例代码
2017/09/25 Javascript
js实现动态增加文件域表单功能
2018/10/22 Javascript
JS实现的贪吃蛇游戏完整实例
2019/01/18 Javascript
JS实现电话号码的字母组合算法示例
2019/02/26 Javascript
vue两组件间值传递 $router.push实现方法
2019/05/15 Javascript
layui-table获得当前行的上/下一行数据的例子
2019/09/24 Javascript
Python中对象的引用与复制代码示例
2017/12/04 Python
python3之模块psutil系统性能信息使用
2018/05/30 Python
Python socket模块实现的udp通信功能示例
2019/04/10 Python
python多继承(钻石继承)问题和解决方法简单示例
2019/10/21 Python
Python for循环与getitem的关系详解
2020/01/02 Python
python爬虫 requests-html的使用
2020/11/30 Python
廉价航班、机票和酒店:JustFly
2018/02/07 全球购物
新大陆软件面试题
2016/11/24 面试题
红色故事演讲稿
2014/05/22 职场文书
毕业生代领毕业材料的授权委托书
2014/09/29 职场文书
关于运动会广播稿50字
2014/10/18 职场文书
承诺书模板大全
2015/05/04 职场文书
志愿服务心得体会
2016/01/15 职场文书
2016幼儿教师自荐信范文
2016/01/28 职场文书
高中诗歌鉴赏教学反思
2016/02/16 职场文书