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使用内存zipfile对象在内存中打包文件示例
Apr 30 Python
对python添加模块路径的三种方法总结
Oct 16 Python
python将txt文档每行内容循环插入数据库的方法
Dec 28 Python
python 判断矩阵中每行非零个数的方法
Jan 26 Python
总结Python图形用户界面和游戏开发知识点
May 22 Python
python实现两个经纬度点之间的距离和方位角的方法
Jul 05 Python
详细介绍pandas的DataFrame的append方法使用
Jul 31 Python
Django 1.10以上版本 url 配置注意事项详解
Aug 05 Python
python GUI库图形界面开发之PyQt5信号与槽事件处理机制详细介绍与实例解析
Mar 08 Python
Python 防止死锁的方法
Jul 29 Python
属性与 @property 方法让你的python更高效
Sep 21 Python
Pytorch 图像变换函数集合小结
Feb 01 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
一个连接两个不同MYSQL数据库的PHP程序
2006/10/09 PHP
php模块memcache和memcached区别分析
2011/06/14 PHP
PHP遍历某个目录下的所有文件和子文件夹的实现代码
2013/06/28 PHP
js实现的网站首页随机公告随机公告
2007/03/14 Javascript
javascript 图片上一张下一张链接效果代码
2010/03/12 Javascript
超级酷和最实用的jQuery实例收集(20个)
2010/04/21 Javascript
使用jquery与图片美化checkbox和radio控件的代码(打包下载)
2010/11/11 Javascript
为什么JavaScript没有块级作用域
2016/05/22 Javascript
EasyUI学习之DataGird分页显示数据
2016/12/29 Javascript
详解React Native顶|底部导航使用小技巧
2017/09/14 Javascript
vue学习笔记之v-if和v-show的区别
2017/09/20 Javascript
解决使用Vue.js显示数据的时,页面闪现原始代码的问题
2018/02/11 Javascript
微信小程序实现自定义picker选择器弹窗内容
2020/05/26 Javascript
微信小程序canvas实现刮刮乐效果
2018/07/09 Javascript
vue2路由方式--嵌套路由实现方法分析
2020/03/06 Javascript
[01:14:31]Secret vs VG 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
python获取外网IP并发邮件的实现方法
2017/10/01 Python
python利用paramiko连接远程服务器执行命令的方法
2017/10/16 Python
浅谈python 读excel数值为浮点型的问题
2018/12/25 Python
Python实现快速排序的方法详解
2019/10/25 Python
使用python写一个自动浏览文章的脚本实例
2019/12/05 Python
linux环境下安装python虚拟环境及注意事项
2020/01/07 Python
Keras 切换后端方式(Theano和TensorFlow)
2020/06/19 Python
Python filter()及reduce()函数使用方法解析
2020/09/05 Python
通过案例解析python鸭子类型相关原理
2020/10/10 Python
CSS3关于z-index不生效问题的解决
2020/02/19 HTML / CSS
canvas小画板之平滑曲线的实现
2020/08/12 HTML / CSS
北承题目(C++)
2012/05/16 面试题
生物专业个人自荐信范文
2013/11/29 职场文书
给医务人员表扬信
2014/01/12 职场文书
大学生军训感想
2014/02/16 职场文书
会计实训报告范文
2014/11/04 职场文书
2014幼儿园班主任工作总结
2014/12/04 职场文书
勤俭节约主题班会
2015/08/13 职场文书
Vue的生命周期一起来看看
2022/02/24 Vue.js
Valheim服务器 Mod修改安装教程 【ValheimPlus】
2022/12/24 Servers