对应github地址:密码重置
 
原理: 
1. 一个需要输入用户邮箱和注册码的密码忘记页面
2. 点击提交后,用户邮箱收到一个邮件,包含重置密码的链接
3. 点击链接进入密码重置页面
 
所以我们需要2个html页面实现重置功能
 
 
一. 忘记密码页面
 
把forgetpasssword.html拷贝到template目录
 
1. 在users/forms.py中定义ForgetForm
 
 
2. 在users/views.py中定义ForgetPwdView的get函数
 
 
3. users/urls.py中配置URL
 
 
4. 替换login.html中忘记密码的href地址为urls.py中定义的URL模式名称
 
 
5. 修改forgetpwd.html
1)修改css,js,图片等静态资源的地址
前端中加入{% load staticfiles %},然后修改css等地址如下
 
2)修改验证码图片,大概85行处
 
3)添加错误提示信息
 
为空时输入框标红
 
账号信息填写后提交错误时,信息回填,需要在账号的<input>标签中修改value值如下
 
 
 
6. 给ForgetPwdView添加POST方法
 
6.1. 在forgetpwd.html中修改<form>标签
大概80行处修改action地址为
添加{% csrf_token %}
 
6.2. 完善apps/utils/email_send.py中的密码忘记类型
 
 
 
 
 
二.  配置重置密码接口
 
先把重置密码页面password_reset.html放到templates目录
 
1. 因为password_reset.html中的<form>标签中有input输入框,因此我们需要编写form验证
users/forms.py中添加ModifyPwdForm
注意这里的passsword1,password2必须和password_reset.html中<form>标签中的name属性值一样
 
 
2. users/views中编写重置密码view的get函数
 
 
 
3. 修改password_reset.html中的<form>标签中添加一个隐藏的<input>标签,用来传递需要重置哪个用户的密码,因为是在未登录的状态下修改用户密码
修改<form>标签中的action,并添加{% csrf_token %}
(上面中的url模板会报错,后面修改)
 
 
4. 在users/urls.py中配置reset的URL
 
说明:
reset_pwd表示的这个URL模式有一个active_code的参数,而password_reset.html中把form表单的值传递给users:reset_pwd,后面并没有加active_code参数,按照URL匹配规则就会报错。
所以需要重新定义一个ModifyPwdView来处理password_reset.html中的post请求
 
 
5. 定义ModifyPwdView
 
 
6. users/urls.py中添加ModifyPwdView相应的URL
改写password_reset.html中<from>标签中的action地址为
 
 
7. 修改password_reset.html中<input>标签的type值为submit,否则提交不成功。原先为button
 
 
 

mxonline实战6 , 忘记用户密码时进行重置的更多相关文章

  1. 忘记root密码时如何重设密码

    哈哈,太久没用linux了,把自己的登陆密码给忘了.今天找了下方法如何重设密码以登陆系统. 此文仅以作备忘. 忘记linux密码时,可以使用单用户模式进入linux,修改root密码.1.在linux ...

  2. Mysql忘记用户密码的解决办法

    1.1 忘记用户密码的解决办法 普通用户,直接用root超级管理员登录进去修改密码就可以了,但是如果root密码丢失了,怎么办呢? 1.1.1 msyqld_saft方式找回密码 停止mysql:se ...

  3. oracle之修改/忘记用户密码

    一.修改/忘记用户密码: ## 修改oracle用户名和密码 sqlplus /nolog ## DBA角色进入 conn /as sysdba; ## 查看用户列表 select username ...

  4. Ubuntu 14.04 忘记用户密码(备忘)

    参考文章地址:www.linuxidc.com/Linux/2013-11/92236.htm 重启电脑 开机就会进入一个Grub引导页面,选择 "Ubuntu 高级选项"之后,按 ...

  5. mxonline实战4,用户登陆页面2和用户注册1

            一. 基于类来定义view.py diango中使用基于类来定义views的功能,其实更加方便,因为这样可继承一些定义好的基类,来减少我们的代码量   1. 使用基于类的方法,来重新定 ...

  6. Oracle使用——oracle 忘记用户密码登录

    背景 有时候我们忘记了oracle登录的用户密码,甚至是用户名称都不确定,应该怎么登陆呢 操作系统 CentOS7 Oracle12c 操作步骤 使用sqlplus登录系统:sqlplus  /  a ...

  7. mxonline实战15,用户中心:我的课程, 我的收藏,我的消息,登出和点击数以及收藏数

     对应github地址:第15天     一.  我的课程   1. 继承usercenter-base页面 2. 编写url, view

  8. mysql8忘记登录密码时,修改密码方法

    一.停止mysqld进程 systemctl stop mysqld.service 二.修改/etc/my.cnf(在mysqld选项添加skip-grant-tables),设置免密码登录: vi ...

  9. redhat7.3忘记root密码后如何重置root密码

    redhat7系如果忘记root密码,重置密码方法与redhat6系不同! 1.开机启动系统,在grub选择启动内核项时 按‘e’进入编辑模式 2.这时看到的参数并不全,要按上下键滚动显示, 3.在l ...

随机推荐

  1. 使用java代码编辑oracle数据库

    package com.hanqi; import java.io.IOException; import java.sql.Connection; import java.sql.DriverMan ...

  2. Rigidbody中 Angular Drag (角阻力):

    Rigidbody中 Angular Drag  (角阻力):同样指的是空气阻力,只不过是用来阻碍物体旋转的.如果设置成无限的话,物体会立即停止旋转.如果设置成0,物体在上升过程中,会发生侧翻旋转. ...

  3. Mac 搭建达尔文流媒体服务器

    Darwin Streaming Server简称DSS.DSS是Apple公司提供的开源实时流媒体播放服务器程序. 1.下载安装 官网地址:http://dss.macosforge.org/ Ma ...

  4. c语言define和typedef区别和使用

    define完全可以理解替换,typedef代表别名.听着差不多的意思,那2者区别在哪? 先来个简单例子查看基本使用. //define和typedef区别 #define DB double //替 ...

  5. SVG与HTML、JavaScript的三种调用方式

    一.在HTMl中访问SVG的DOM Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHig ...

  6. 第四章 Windows的图形设备接口及Windows绘图 P83 4-6

    实验(实习)名称  图形程序设计及其应用  实验(实习)日期 一.实验目的 1.熟悉图形设备接口的概念及其应用. 二.实验内容及步骤  实验任务 1.熟悉基于图形应用的程序设计: 2.掌握刷新技术及其 ...

  7. etl使用表

    select * from etl_data_map t;select * from etl_column t;select * from etl_table_def t;select * from ...

  8. Java设计模式(6)——建造者模式

    定义:Builder模式也叫建造者模式或者生成器模式,Builder模式是一种对象创建型模式之一,用来隐藏复合对象(对象的属性为另一个对象的引用)的创建过程,它把复合对象的创建过程交给Builder, ...

  9. 20155230 2016-2017-2 《Java程序设计》第七周学习总结

    20155230 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 世界时:在1972年引入UTC之前,GMT与UT是相同的 格林威治标准时间(GMT),现已不 ...

  10. apicloud 和 微信小程序,你会用哪 个?

    微信 小程序开始火了,app跨平台的革命再次高涨,不得不说,不用再担心android和ios双版本开发成本,及h5的开发 和apicloud一样,不需要关注平台问题,只需要关注前端js.css就能大a ...