利用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 ORM框架SQLAlchemy学习笔记之映射类使用实例和Session会话介绍
Jun 10 Python
python实现一次创建多级目录的方法
May 15 Python
使用Python绘制图表大全总结
Feb 11 Python
python实现人脸识别代码
Nov 08 Python
Python中pow()和math.pow()函数用法示例
Feb 11 Python
python中pylint使用方法(pylint代码检查)
Apr 06 Python
利用python实现简易版的贪吃蛇游戏(面向python小白)
Dec 30 Python
Python 实现交换矩阵的行示例
Jun 26 Python
利用pyecharts实现地图可视化的例子
Aug 12 Python
python 求10个数的平均数实例
Dec 16 Python
对tensorflow 中tile函数的使用详解
Feb 07 Python
pandas中ix的使用详细讲解
Mar 09 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
php写的简易聊天室代码
2011/06/04 PHP
php实现的美国50个州选择列表实例
2015/04/20 PHP
php中session定期自动清理的方法
2015/11/12 PHP
thinkPHP统计排行与分页显示功能示例
2016/12/02 PHP
JavaScript 动态创建VML的方法
2009/10/14 Javascript
ExtJs GridPanel简单的增删改实现代码
2010/08/26 Javascript
jquery插件制作 表单验证实现代码
2012/08/17 Javascript
jquery获取一组checkbox的值(实例代码)
2013/11/04 Javascript
jquery插件开发之实现jquery手风琴功能分享
2014/03/10 Javascript
jQuery分组选择器用法实例
2014/12/23 Javascript
js关于getImageData跨域问题的解决方法
2016/10/14 Javascript
angular ngClick阻止冒泡使用默认行为的方法
2016/11/03 Javascript
微信小程序scroll-view实现横向滚动和上拉加载示例
2017/03/06 Javascript
JS 中使用Promise 实现红绿灯实例代码(demo)
2017/10/20 Javascript
js变量声明var使用与不使用的区别详解
2019/01/21 Javascript
微信小程序中为什么使用var that=this
2019/08/27 Javascript
JavaScript canvas实现雪花随机动态飘落
2020/02/08 Javascript
微信小程序实现点击生成随机验证码
2020/09/09 Javascript
各个系统下的Python解释器相关安装方法
2015/10/12 Python
使用python实现rsa算法代码
2016/02/17 Python
Python基础练习之用户登录实现代码分享
2017/11/08 Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
2020/08/07 Python
django使用graphql的实例
2020/09/02 Python
html5新特性与用法大全
2018/09/13 HTML / CSS
简单介绍HTML5中的文件导入
2015/05/08 HTML / CSS
比利时买床:Beter Bed
2017/12/06 全球购物
Java Servlet的主要功能和作用是什么
2014/02/14 面试题
微笑面对生活演讲稿
2014/05/13 职场文书
护理专业自荐书
2014/06/04 职场文书
党的群众路线教育实践活动总结报告
2014/07/03 职场文书
机关党员四风问题个人整改措施
2014/10/26 职场文书
2014年学校德育工作总结
2014/12/05 职场文书
优秀高中学生评语
2014/12/30 职场文书
区域经理岗位职责
2015/02/02 职场文书
营业员岗位职责
2015/02/11 职场文书
聊聊JS ES6中的解构
2021/04/29 Javascript