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去掉字符串中空格的方法
Mar 11 Python
Pipenv一键搭建python虚拟环境的方法
May 22 Python
对python中list的拷贝与numpy的array的拷贝详解
Jan 29 Python
selenium 安装与chromedriver安装的方法步骤
Jun 12 Python
python代码实现逻辑回归logistic原理
Aug 07 Python
Python tkinter三种布局实例详解
Jan 06 Python
浅谈Python的方法解析顺序(MRO)
Mar 05 Python
python实现最速下降法
Mar 24 Python
Python xmltodict模块安装及代码实例
Oct 05 Python
详解matplotlib绘图样式(style)初探
Feb 03 Python
pandas提升计算效率的一些方法汇总
May 30 Python
Python中json.load()和json.loads()有哪些区别
Jun 07 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
mysql4.1以上版本连接时出现Client does not support authentication protocol问题解决办法
2007/03/15 PHP
PHP Header用于页面跳转要注意的几个问题总结
2008/10/03 PHP
Cannot modify header information错误解决方法
2008/10/08 PHP
php采用file_get_contents代替使用curl实例
2014/11/07 PHP
PHP实现登陆并抓取微信列表中最新一组微信消息的方法
2017/07/10 PHP
PHP+RabbitMQ实现消息队列的完整代码
2019/03/20 PHP
php session_decode函数用法讲解
2019/05/26 PHP
php字符串过滤strip_tags()函数用法实例分析
2019/06/24 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
2020/02/23 PHP
多个iframe自动调整大小的问题
2006/09/18 Javascript
js select常用操作控制代码
2010/03/16 Javascript
Node.js+Express配置入门教程详解
2016/05/19 Javascript
AngularJS中的API(接口)简单实现
2016/07/28 Javascript
移动端界面的适配
2017/01/11 Javascript
使用contextMenu插件实现Bootstrap table弹出右键菜单
2017/02/20 Javascript
微信小程序实现图片上传功能实例(前端+PHP后端)
2018/01/10 Javascript
基于vue.js实现的分页
2018/03/13 Javascript
记一次webpack3升级webpack4的踩坑经历
2018/06/12 Javascript
mpvue小程序仿qq左滑置顶删除组件
2018/08/03 Javascript
通过npm或yarn自动生成vue组件的方法示例
2019/02/12 Javascript
基于element-ui对话框el-dialog初始化的校验问题解决
2020/09/11 Javascript
[38:30]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第一场2
2014/05/24 DOTA
Python中使用摄像头实现简单的延时摄影技术
2015/03/27 Python
Python实现简单多线程任务队列
2016/02/27 Python
Python使用内置json模块解析json格式数据的方法
2017/07/20 Python
import的本质解析
2017/10/30 Python
利用python如何处理nc数据详解
2018/05/23 Python
Pycharm 设置默认头的图文教程
2019/01/17 Python
Python脚本利用adb进行手机控制的方法
2019/07/08 Python
pyqt5实现井字棋的示例代码
2020/12/07 Python
html5中监听canvas内部元素点击事件的三种方法
2019/04/28 HTML / CSS
培训楼经理岗位责任制
2014/02/10 职场文书
《与象共舞》教学反思
2014/02/24 职场文书
公司保密承诺书
2014/03/27 职场文书
机电一体化专业毕业生自荐信
2014/06/19 职场文书
2016教师暑期培训学习心得体会
2016/01/09 职场文书