利用Django内置的认证视图实现用户密码重置功能详解


Posted in Python onNovember 24, 2017

前言

密码重置功能相信对大家来说都不陌生,本文主要给大家介绍了关于使用Django内置的认证视图实现简单的通过邮箱重置密码的功能,分享出来供大家参考学习,下面话不多说了,来一起来看看详细的介绍吧。

版本: django 1.11

实现方法

在django.contrib.auth.views中提供了四个类视图用于密码重置

class PasswordResetView

URL name: password_reset  #要保持相同

通过给邮箱发送重置密码的链接进行密码重置.注意如果邮箱不存在,不会发送邮件但也不会有错误提示!

属性:

  • template_name:指定重置密码页面的模板名称(输入邮箱页面),默认为'registration/password_reset_form.html'
  • form_class:指定对邮箱进行验证的Form,默认为'PasswordResetForm',如果要实现'邮箱未注册'的提示,可以重写该Form的clean()方法.
  • email_template_name:邮件内容的模板,默认为'registration/password_reset_email.html'.
  • subject_template_name:邮件主题的模板,默认'registration/password_reset_subject.txt'.
  • success_url:邮件发送成功(或邮箱未注册)后重定向的URL.
  • form_email: 发送邮件的地址.默认使用DEFAULT_FORM_EMAIL.需要在settings.py文件中进行邮箱参数的配置.
  • extra_context: 需要添加到模板中的额外上下文数据.

对PasswordResetView进行简单定制:

form django.contrib.auth.views import PasswordRestView
from django.contrib.auth.forms import PasswordRestForm
from django.contrib.auth.models import User
from django import forms

class CustomPasswordResetForm(PasswordRestForm):
 #实现'邮箱未注册'的提示
 class clean_email(self):
 email = self.cleaned_date.get('email', '')
 if not User.objects.filter(email=email):
  raise forms.ValidationError('邮箱未注册')
 return email

class CustomPasswordResetView(PasswordRestView):
 template_name = 'your_passd_reset.html'
 form_class = CustomPasswordResetForm


#urls.py
from myapp import views

urlpatterns = [
 # 除非重写了各视图的模板,否则name需要和指定的URL name一致
 url(r'^password_reset/$', views.CustomPasswordResetView.as_view(), name='password_reset'),
]

class PasswordResetDoneView

URL name: password_reset_done

显示邮件成功发送的页面.该视图默认由PasswordResetView的success_url参数来调用.

注意:如果邮箱未注册,用户的is_active为False或者有不可用密码,仍然会重定向到该页面,但是不会发送邮件!

属性:

  • template_name:指定模板文件,默认'registration/password_reset_done.html'
  • extra_context: 添加额外的上下文数据

class PasswordResetConfirmView

URL name: password_reset_confirm

显示一个含有输入新密码的表单的页面

属性:

  • template_name:指定模板文件,默认'registration/password_reset_confirm.html'
  • post_reset_login: 一个布尔值,指定密码重置成功后是否自动登录,默认为False.
  • post_reset_login_backend:当你重写了authentication_backend,并且设置post_reset_login为True,需要指定所使用的authentication_backend
  • form_class: 用于验证密码的Form,默认为SetPasswordForm.
  • success_url: 密码重置后重定向的url,默认'password_reset_complete'.
  • extra_context: 额外的上下文

class PasswordResetCompleteView

URL name:password_reset_complete

显示一个视图,通知用户密码已重置成功

属性:

  • template_name: 指定模板文件,默认'registration/password_reset_complete.html'
  • extra_context: 额外的上下文

下面这三个视图的重写方法与PasswordResetView相同.

如果完全使用默认提供的功能和模板,可以直接在urls.py文件中引入

from django.conf.urls import url, include
from django.contrib.auth import views as auth_views

urlpatterns = [
 url(r'^login/$', auth_views.LoginView.as_view(), name='login'),
 url(r'^logout/$', auth_views.logout_then_login, name='logout'), #注销后重定向到登录界面
 url(r'^password_reset/$', auth_views.PasswordResetView.as_view(form_class=forms.CustomPasswordResetForm), name='password_reset'), #密码重置链接
 url(r'^password_reset/done/$', auth_views.PasswordResetDoneView.as_view(), name='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})/$', auth_views.PasswordResetConfirmView.as_view(), name='password_reset_confirm'), #用户通过邮箱打开的重置密码页面
 url(r'^reset/done/$', auth_views.PasswordResetCompleteView.as_view(), name='password_reset_complete'), #密码重置完成后跳转的页面
]

参考:https://docs.djangoproject.com/en/1.11/topics/auth/default/#module-django.contrib.auth.views

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。   

Python 相关文章推荐
Python实现从url中提取域名的几种方法
Sep 26 Python
Python中常见的异常总结
Feb 20 Python
Python使用matplotlib实现的图像读取、切割裁剪功能示例
Apr 28 Python
Django学习教程之静态文件的调用详解
May 08 Python
Python OpenCV处理图像之图像像素点操作
Jul 10 Python
python使用tornado实现登录和登出
Jul 28 Python
实例分析python3实现并发访问水平切分表
Sep 29 Python
python批量修改图片后缀的方法(png到jpg)
Oct 25 Python
基于python实现从尾到头打印链表
Nov 02 Python
python 实现方阵的对角线遍历示例
Nov 29 Python
Python自动重新加载模块详解(autoreload module)
Apr 01 Python
python中Tkinter 窗口之输入框和文本框的实现
Apr 12 Python
利用python3随机生成中文字符的实现方法
Nov 24 #Python
Python内置函数 next的具体使用方法
Nov 24 #Python
python中WSGI是什么,Python应用WSGI详解
Nov 24 #Python
python中print()函数的“,”与java中System.out.print()函数中的“+”功能详解
Nov 24 #Python
Python内置函数——__import__ 的使用方法
Nov 24 #Python
Django中login_required装饰器的深入介绍
Nov 24 #Python
Python多进程库multiprocessing中进程池Pool类的使用详解
Nov 24 #Python
You might like
php5中类的学习
2008/03/28 PHP
php Ajax乱码
2008/04/09 PHP
PHP 文件缓存的性能测试
2010/04/25 PHP
利用PHP判断文件是否为图片的方法总结
2017/01/06 PHP
jQuery LigerUI 插件介绍及使用之ligerDrag和ligerResizable示例代码打包
2011/04/06 Javascript
javascript 事件处理程序介绍
2012/06/27 Javascript
Enter转换为Tab的小例子(兼容IE,Firefox)
2013/11/14 Javascript
javascript Event对象详解及使用示例
2013/11/22 Javascript
jQuery循环滚动新闻列表示例代码
2014/06/17 Javascript
教你如何在 Javascript 文件里使用 .Net MVC Razor 语法
2014/07/23 Javascript
node.js中的fs.linkSync方法使用说明
2014/12/15 Javascript
jquery常用函数与方法汇总
2015/09/01 Javascript
jQuery给指定的table动态添加删除行的操作方法
2016/10/12 Javascript
微信小程序 触控事件详细介绍
2016/10/17 Javascript
JS树形菜单组件Bootstrap TreeView使用方法详解
2016/12/21 Javascript
jquery实现倒计时小应用
2017/09/19 jQuery
使用nodeJs来安装less及编译less文件为css文件的方法
2017/11/20 NodeJs
Webpack3+React16代码分割的实现
2021/03/03 Javascript
[03:22]DAC最前线(第二期)—DOTA2亚洲邀请赛主赛场周边及线路探访
2015/01/24 DOTA
[10:39]DOTA2上海特级锦标赛音乐会纪录片
2016/03/21 DOTA
[01:07:02]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第三场 2月26日
2021/03/11 DOTA
Python中的with语句与上下文管理器学习总结
2016/06/28 Python
python-opencv在有噪音的情况下提取图像的轮廓实例
2017/08/30 Python
Python装饰器用法示例小结
2018/02/11 Python
利用arcgis的python读取要素的X,Y方法
2018/12/22 Python
python实现移位加密和解密
2019/03/22 Python
PIP和conda 更换国内安装源的方法步骤
2020/09/21 Python
原装进口全世界:天猫国际
2016/08/03 全球购物
英国在线定做百叶窗网站:Make My Blinds
2020/08/17 全球购物
实习生求职自荐信
2014/02/07 职场文书
乡镇创先争优活动总结
2014/08/28 职场文书
2014年图书馆个人工作总结
2014/12/18 职场文书
中班下学期个人工作总结
2015/02/12 职场文书
乔布斯辞职信(中英文对照)
2015/05/12 职场文书
好人好事新闻稿
2015/07/17 职场文书
2016年党课培训学习心得体会
2016/01/07 职场文书