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有序字典简单实现方法示例
Sep 28 Python
Python编程二分法实现冒泡算法+快速排序代码示例
Jan 15 Python
python实现机器人行走效果
Jan 29 Python
浅析Python 3 字符串中的 STR 和 Bytes 有什么区别
Oct 14 Python
python使用thrift教程的方法示例
Mar 21 Python
python 使用shutil复制图片的例子
Dec 13 Python
基于Django实现日志记录报错信息
Dec 17 Python
关于jupyter打开之后不能直接跳转到浏览器的解决方式
Apr 13 Python
python 实现两个线程交替执行
May 02 Python
python怎么判断模块安装完成
Jun 19 Python
Python中猜拳游戏与猜筛子游戏的实现方法
Sep 04 Python
python 使用openpyxl读取excel数据
Feb 18 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
一个数据采集类
2007/02/14 PHP
配置Apache2.2+PHP5+CakePHP1.2+MySQL5运行环境
2009/04/25 PHP
php旋转图片90度的方法
2013/11/07 PHP
学习thinkphp5.0验证类使用方法
2017/11/16 PHP
Laravel框架使用Redis的方法详解
2018/05/30 PHP
php使用fullcalendar日历插件详解
2019/03/06 PHP
在laravel-admin中列表中禁止某行编辑、删除的方法
2019/10/03 PHP
表单的一些基本用法与技巧
2006/07/15 Javascript
JS版网站风格切换实例代码
2008/10/06 Javascript
JQuery UI DatePicker中z-index默认为1的解决办法
2010/09/28 Javascript
JavaScript实现按Ctrl键打开新页面
2014/09/04 Javascript
使用jQuery制作遮罩层弹出效果的极简实例分享
2016/05/12 Javascript
BootStrap创建响应式导航条实例代码
2016/05/31 Javascript
聊一聊jQuery插件uploadify使用方法
2016/08/24 Javascript
JS动态给对象添加属性和值的实现方法
2016/10/21 Javascript
js中开关变量使用实例
2017/02/24 Javascript
详解Vue.js分发之作用域槽
2017/06/13 Javascript
解决npm管理员身份install时出现权限的问题
2018/03/16 Javascript
vue2.0实现音乐/视频播放进度条组件
2018/06/06 Javascript
layui表单提交到后台自动封装到实体类的方法
2019/09/12 Javascript
layui使用label标签的方法
2019/09/14 Javascript
Python中使用item()方法遍历字典的例子
2014/08/26 Python
Python实现telnet服务器的方法
2015/07/10 Python
Python实现矩阵加法和乘法的方法分析
2017/12/19 Python
Python编程argparse入门浅析
2018/02/07 Python
python批量爬取下载抖音视频
2019/06/17 Python
用python画一只可爱的皮卡丘实例
2019/11/21 Python
Python控制台输出时刷新当前行内容而不是输出新行的实现
2020/02/21 Python
施华洛世奇天猫官方旗舰店:SWAROVSKI
2017/04/17 全球购物
英国女装网上商店:I Saw It First
2018/10/18 全球购物
2014年三八妇女节活动总结
2014/03/01 职场文书
就职演讲稿范文
2014/05/19 职场文书
2015年教务处干事工作总结
2015/07/22 职场文书
《纸船和风筝》教学反思
2016/02/18 职场文书
十二月早安励志心语大全
2019/12/03 职场文书
python中mongodb包操作数据库
2022/04/19 Python