利用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写的创建文件夹自定义函数mkdir()
Aug 25 Python
跟老齐学Python之有容乃大的list(4)
Sep 28 Python
python 全文检索引擎详解
Apr 25 Python
Python内置函数delattr的具体用法
Nov 23 Python
对numpy中shape的深入理解
Jun 15 Python
python3.7.0的安装步骤
Aug 27 Python
Python numpy中矩阵的基本用法汇总
Feb 12 Python
详解Python3 对象组合zip()和回退方式*zip
May 15 Python
python 浅谈serial与stm32通信的编码问题
Dec 18 Python
keras自动编码器实现系列之卷积自动编码器操作
Jul 03 Python
python uuid生成唯一id或str的最简单案例
Jan 13 Python
PySwarms(Python粒子群优化工具包)的使用:GlobalBestPSO例子解析
Apr 05 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实现批量查询清除一句话后门的代码
2008/01/20 PHP
PHP number_format() 函数定义和用法
2012/06/01 PHP
php解决DOM乱码的方法示例代码
2016/11/20 PHP
js indexOf()定义和用法
2012/10/21 Javascript
Jquery 获取对象的几种方式介绍
2014/01/17 Javascript
AngularJS表达式讲解及示例代码
2016/08/16 Javascript
JS+canvas实现的五子棋游戏【人机大战版】
2017/07/19 Javascript
详解webpack2+node+react+babel实现热加载(hmr)
2017/08/24 Javascript
jquery写出PC端轮播图实例
2018/01/26 jQuery
vue.js,ajax渲染页面的实例
2018/02/11 Javascript
vue将对象新增的属性添加到检测序列的方法
2018/02/24 Javascript
javascript匿名函数中的'return function()'作用
2018/10/15 Javascript
javascript中数组的常用算法深入分析
2019/03/12 Javascript
微信小程序scroll-view锚点链接滚动跳转功能
2019/12/12 Javascript
Python实现的彩票机选器实例
2015/06/17 Python
Python获取指定文件夹下的文件名的方法
2018/02/06 Python
Python将json文件写入ES数据库的方法
2019/04/10 Python
python点击鼠标获取坐标(Graphics)
2019/08/10 Python
Python类中的装饰器在当前类中的声明与调用详解
2020/04/15 Python
python实现b站直播自动发送弹幕功能
2021/02/20 Python
香港莎莎官网Sasa.com:亚洲著名国际化妆品商城
2019/11/10 全球购物
银行员工辞职信范文
2014/01/20 职场文书
12岁生日感言
2014/01/21 职场文书
旅游饭店管理专业自荐书
2014/06/28 职场文书
普通党员对照检查材料
2014/08/28 职场文书
税务干部群众路线教育实践活动自我剖析材料
2014/09/21 职场文书
2015年元旦主持词结束语
2014/12/14 职场文书
歼十出击观后感
2015/06/11 职场文书
个人欠条范本
2015/07/03 职场文书
考研经验交流会策划书
2015/11/02 职场文书
公司中层管理培训心得体会
2016/01/11 职场文书
幼儿园教师心得体会范文
2016/01/21 职场文书
优秀党员先进事迹材料2016
2016/02/29 职场文书
MySQL 重命名表的操作方法及注意事项
2021/05/21 MySQL
MySQL系列之五 视图、存储函数、存储过程、触发器
2021/07/02 MySQL
本地搭建minio文件服务器(使用bat脚本启动)的方法
2022/07/15 Servers