Django小技巧10: 自定义认证策略

翻译整理自: simpleisbetterthancomplex.com

Django 内置了一套功能极全的认证系统,而且可以很容易的进行自定义, 本章的内容就是自定义认证策略。

对于内置的login视图,Django 使用django.contrib.auth.forms.AuthenticationForm来处理身份验证过程。 这个认证检查了基本的username, passwordis_active标识.

Django 可以通过AuthenticationFormconfirm_login_allowed(user)方法, 轻松添加自定义认证.

假设你想通过双重的电子邮件认证, 只有用户点击确认邮件后才可以登录,那么你可以这样做:

  • forms.py

Python

from django import forms
from django.contrib.auth.forms import AuthenticationForm

class CustomAuthenticationForm(AuthenticationForm):
    def confirm_login_allowed(self, user):
        if not user.is_active or not user.is_validated:
            raise forms.ValidationError('There was a problem with your login.', code='invalid_login')
  • urls.py

Python

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

from .forms import CustomAuthenticationForm

urlpatterns = [
    url(r'^login/$', auth_views.login, {'template_name': 'core/login.html',
        'authentication_form': CustomAuthenticationForm}, name='login'),
    url(r'^logout/$', auth_views.logout, name='logout'),
    ...
]

很简单, 只需覆盖confirm_login_allowed方法,并在 urlconf 替换新的表单CustomAuthenticationForm即可。你可以在confirm_login_allowed添加任何的代码策略, 需要注意的是, 如果认证失败仅能抛出ValidationError才可以正常工作.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java3y

SVN就是这么简单

什么是SVN SVN全称:Subversion,是一个开放源代码的版本控制系统 Svn是一种集中式文件版本管理系统。集中式代码管理的核心是服务器,所有开发者在开...

32730
来自专栏数据和云

实践真知:一则因内存导致的集群故障

故障概述 某天晚上,我方收到行方请求协助分析某数据库两节点RAC数据库问题,问题描述如下: 该 数据库版本为11.2.0.3,该版本中ASM内存管理机制有所变化...

36750
来自专栏我和PYTHON有个约会

爬虫正传-江湖路远-0101-刀未佩妥,出门已是江湖

小结:urllib2是Python2版本中专门用于进行网络数据请求访问的一个基础模块,包含了最基本的操作网络数据的各种类型和函数,如上述程序中访问新浪网并获取响...

10320
来自专栏ascii0x03的安全笔记

VirtualBox - RTR3InitEx failed with rc=-1912 (rc=-1912)

有一天重启电脑后虚拟机virtual box突然打不开了,提示类似 https://askubuntu.com/questions/900794/virtual...

39950
来自专栏高爽的专栏

IE中iframe跨域访问

1      什么叫跨域?        指在A系统(第一方)中通过URL直接调用B系统(第三方),并且两个系统分别部署在不同的域内,简单的理解就是访问这两个系...

29000
来自专栏Dawnzhang的开发者手册

Postman 使用方法详解

用户在开发或者调试网络程序或者是网页B/S模式的程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网络的监视工具比如著名的Firebug等网页调试工具。...

13620
来自专栏Java后端技术栈

简要分析ZooKeeper基本原理

最近一直有小伙伴私信我,问一些关于Zookeeper的知识,下边关于的Zookeeper的知识整理了一下,一起学习一下。

7430
来自专栏腾讯Bugly的专栏

移动 H5 首屏秒开优化方案探讨

导语 随着移动设备性能不断增强,web 页面的性能体验逐渐变得可以接受,又因为 web 开发模式的诸多好处(跨平台,动态更新,减体积,无限扩展),APP 客户端...

87350
来自专栏小夜博客

Crontab自动记录服务器负载

38390
来自专栏北京马哥教育

能当主力,能入虚拟机,还能随时打包带走,Linux 就是这么强大

这里介绍一下自己管理自己的Linux桌面的一点经验吧,我觉得还是有不少可取之处的。先来说一下大多数人管理Linux桌面的方法有哪些不方便的地方吧:

29300

扫码关注云+社区

领取腾讯云代金券