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跳出循环语句continue与break的区别
Aug 25 Python
python遍历目录的方法小结
Apr 28 Python
Python常见异常分类与处理方法
Jun 04 Python
利用python求解物理学中的双弹簧质能系统详解
Sep 29 Python
Python实现的井字棋(Tic Tac Toe)游戏示例
Jan 31 Python
详解Python中如何写控制台进度条的整理
Mar 07 Python
python实现逆序输出一个数字的示例讲解
Jun 25 Python
详解python之heapq模块及排序操作
Apr 04 Python
使用浏览器访问python写的服务器程序
Oct 10 Python
Python requests模块cookie实例解析
Apr 14 Python
Django微信小程序后台开发教程的实现
Jun 03 Python
OpenCV-Python 实现两张图片自动拼接成全景图
Jun 11 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
四月新番又没了,《Re:从零开始的异世界生活》第二季延期至7月播出
2020/05/06 日漫
防止用户利用PHP代码DOS造成用光网络带宽
2011/03/01 PHP
php实现的简单日志写入函数
2015/03/31 PHP
通过修改referer下载文件的方法
2008/05/11 Javascript
关于javascript document.createDocumentFragment()
2009/04/04 Javascript
在js中单选框和复选框获取值的方式
2009/11/06 Javascript
一个网马的tips实现分析
2010/11/28 Javascript
JavaScript控制网页层收起和展开效果的方法
2015/04/15 Javascript
JQuery显示隐藏页面元素的方法总结
2015/04/16 Javascript
KnockoutJS 3.X API 第四章之数据控制流if绑定和ifnot绑定
2016/10/10 Javascript
js控制li的隐藏和显示实例代码
2016/10/15 Javascript
BootStrap tooltip提示框使用小结
2016/10/26 Javascript
JS中跨页面调用变量和函数的方法(例如a.js 和 b.js中互相调用)
2016/11/01 Javascript
理解javascript中的Function.prototype.bind的方法
2017/02/03 Javascript
js浏览器滚动条卷去的高度scrolltop(实例讲解)
2017/07/07 Javascript
Angular 作用域scope的具体使用
2017/12/11 Javascript
jQuery实现的淡入淡出与滑入滑出效果示例
2018/04/18 jQuery
JavaScript数组去重算法实例小结
2018/05/07 Javascript
vue实现简单的星级评分组件源码
2018/11/16 Javascript
VUE简单的定时器实时刷新的实现方法
2019/01/20 Javascript
Java Varargs 可变参数用法详解
2020/01/28 Javascript
[00:09]DOTA2全国高校联赛 精彩活动引爆全场
2018/05/30 DOTA
Python中使用partial改变方法默认参数实例
2015/04/28 Python
基于Python实现扑克牌面试题
2019/12/11 Python
利用Tensorboard绘制网络识别准确率和loss曲线实例
2020/02/15 Python
python实现logistic分类算法代码
2020/02/28 Python
将 Ubuntu 16 和 18 上的 python 升级到最新 python3.8 的方法教程
2020/03/11 Python
Jupyter Notebook 实现正常显示中文和负号
2020/04/24 Python
python图片合成的示例
2020/11/09 Python
Notino法国:购买香水和化妆品
2019/04/15 全球购物
国贸专业求职信
2014/06/28 职场文书
公司授权委托书范文
2014/09/21 职场文书
2015年社区民政工作总结
2015/04/21 职场文书
人力资源部工作计划
2019/05/14 职场文书
写作指导:怎么书写竞聘演讲稿?
2019/07/04 职场文书
MySQL定时备份数据库(全库备份)的实现
2021/09/25 MySQL