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调用命令行进度条的方法
May 05 Python
TensorFlow如何实现反向传播
Feb 06 Python
python人民币小写转大写辅助工具
Jun 20 Python
Python实现对文件进行单词划分并去重排序操作示例
Jul 10 Python
python实现京东秒杀功能
Jul 30 Python
Python3 使用cookiejar管理cookie的方法
Dec 28 Python
使用python 对验证码图片进行降噪处理
Dec 18 Python
Python 模拟动态产生字母验证码图片功能
Dec 24 Python
使用python执行shell脚本 并动态传参 及subprocess的使用详解
Mar 06 Python
Python Switch Case三种实现方法代码实例
Jun 18 Python
python 实现aes256加密
Nov 27 Python
python 如何在 Matplotlib 中绘制垂直线
Apr 02 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
通过文字传递创建的图形按钮
2006/10/09 PHP
精美漂亮的php分页类代码
2013/04/02 PHP
ThinkPHP模板判断输出Present标签用法详解
2014/06/30 PHP
ThinkPHP应用模式扩展详解
2014/07/16 PHP
PHP入门教程之面向对象的特性分析(继承,多态,接口,抽象类,抽象方法等)
2016/09/11 PHP
jquery创建表格(自动增加表格)代码分享
2013/12/25 Javascript
使用JavaScript判断图片是否加载完成的三种实现方式
2014/05/04 Javascript
javascript写的异步加载js文件函数(支持数组传参)
2014/06/07 Javascript
javascript检测是否联网的实现代码
2014/09/28 Javascript
js获取字符串最后一位方法汇总
2014/11/13 Javascript
原生Ajax 和jQuery Ajax的区别示例分析
2014/12/17 Javascript
jQuery实现自动滚动到页面顶端的方法
2015/05/22 Javascript
JS绘制生成花瓣效果的方法
2015/08/05 Javascript
jQuery操作iframe中js函数的方法小结
2016/07/06 Javascript
web前端开发upload上传头像js示例代码
2016/10/22 Javascript
jquery select2的使用心得(推荐)
2016/12/04 Javascript
微信小程序 WebSocket详解及应用
2017/01/21 Javascript
vue将时间戳转换成自定义时间格式的方法
2018/03/02 Javascript
解决layui table表单提示数据接口请求异常的问题
2019/09/24 Javascript
layer.prompt使文本框为空的情况下也能点击确定的方法
2019/09/24 Javascript
vue组件中实现嵌套子组件案例
2020/08/31 Javascript
Python读取和处理文件后缀为.sqlite的数据文件(实例讲解)
2017/06/27 Python
Python2与python3中 for 循环语句基础与实例分析
2017/11/20 Python
Django ManyToManyField 跨越中间表查询的方法
2018/12/18 Python
用python建立两个Y轴的XY曲线图方法
2019/07/08 Python
将matplotlib绘图嵌入pyqt的方法示例
2020/01/08 Python
使用CSS3编写灰阶滤镜来制作黑白照片效果的方法
2016/05/09 HTML / CSS
Html5 Canvas实现图片标记、缩放、移动和保存历史状态功能 (附转换公式)
2020/03/18 HTML / CSS
Antonioli美国在线商店:时尚前卫奢华
2019/07/29 全球购物
廉洁自律承诺书
2014/03/27 职场文书
社会实践评语
2014/04/28 职场文书
2014年“四风”问题个人整改措施
2014/09/17 职场文书
培训督导岗位职责
2015/04/10 职场文书
基层党支部承诺书
2015/04/30 职场文书
芙蓉镇观后感
2015/06/10 职场文书
Java使用httpRequest+Jsoup爬取红蓝球号码
2021/07/02 Java/Android