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中何种情况下需要使用断言
Apr 01 Python
Python中关于字符串对象的一些基础知识
Apr 08 Python
python结合opencv实现人脸检测与跟踪
Jun 08 Python
Python正则获取、过滤或者替换HTML标签的方法
Jan 28 Python
Python的网络编程库Gevent的安装及使用技巧
Jun 24 Python
tensorflow实现图像的裁剪和填充方法
Jul 27 Python
在Django model中设置多个字段联合唯一约束的实例
Jul 17 Python
Python自动生成代码 使用tkinter图形化操作并生成代码框架
Sep 18 Python
Python图片的横坐标汉字实例
Dec 04 Python
Python图像处理库PIL的ImageEnhance模块使用介绍
Feb 26 Python
opencv 形态学变换(开运算,闭运算,梯度运算)
Jul 07 Python
如何在python中判断变量的类型
Jul 29 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
多重?l件?合查?(一)
2006/10/09 PHP
php+javascript的日历控件
2009/11/19 PHP
php join函数应用
2011/05/04 PHP
php数组函数序列之in_array() - 查找数组中是否存在指定值
2011/11/07 PHP
php简单浏览目录内容的实现代码
2013/06/07 PHP
php基础设计模式大全(注册树模式、工厂模式、单列模式)
2015/08/31 PHP
学习php设计模式 php实现状态模式
2015/12/07 PHP
PHP验证类的封装与使用方法详解
2019/01/10 PHP
基于jQuery通过jQuery.form.js插件使用ajax提交form表单
2015/08/17 Javascript
Javascript实现的简单右键菜单类
2015/09/23 Javascript
js数组去重的5种算法实现
2015/11/04 Javascript
大型JavaScript应用程序架构设计模式
2016/06/29 Javascript
javascript轮播图算法
2016/10/21 Javascript
jQuery Form表单取值的方法
2017/01/11 Javascript
jQuery EasyUI之验证框validatebox实例详解
2017/04/10 jQuery
浅谈js获取ModelAndView值的问题
2018/03/28 Javascript
详解Vue2.0配置mint-ui踩过的那些坑
2018/04/23 Javascript
scrapyd schedule.json setting 传入多个值问题
2019/08/07 Javascript
JS+DIV实现拖动效果
2020/02/11 Javascript
vue路由切换时取消之前的所有请求操作
2020/09/01 Javascript
[00:35]DOTA2上海特级锦标赛 Newbee战队宣传片
2016/03/03 DOTA
Python使用Redis实现作业调度系统(超简单)
2016/03/22 Python
Python画图学习入门教程
2016/07/01 Python
django rest framework 数据的查找、过滤、排序的示例
2018/06/25 Python
python3+pyqt5+itchat微信定时发送消息的方法
2019/02/20 Python
解决python中用matplotlib画多幅图时出现图形部分重叠的问题
2019/07/07 Python
python 用户交互输入input的4种用法详解
2019/09/24 Python
浅析python 定时拆分备份 nginx 日志的方法
2020/04/27 Python
CSS3的一个简单导航栏实现
2015/08/03 HTML / CSS
mui几种页面跳转方式对比总结概括
2017/08/18 HTML / CSS
巴西葡萄酒销售网站:Wine.com.br
2017/11/07 全球购物
波兰补充商店:Muscle Power
2018/10/29 全球购物
印尼网上商店:Alfacart.com
2019/03/11 全球购物
会计毕业生求职简历的自我评价
2013/10/20 职场文书
初中数学教学反思
2014/01/16 职场文书
Html5大屏数据可视化开发的实现
2021/06/11 HTML / CSS