将Python的Django框架与认证系统整合的方法
这篇文章主要介绍了将Python的Django框架与认证系统整合的方法,包括指定认证后台和编写认证后台等内容,需要的朋友可以参考下
将Django与其他现有认证系统的用户名和密码或者认证方法进行整合是可以办到的。
例如,你所在的公司也许已经安装了LDAP,并且为每一个员工都存储了相应的用户名和密码。 如果用户在LDAP和基于Django的应用上拥有独立的账号,那么这时无论对于网络管理员还是用户自己来说,都是一件很令人头痛的事儿。
为了解决这样的问题,Django认证系统能让您以插件方式与其他认证资源进行交互。
您可以覆盖Diango默认的基于数据库的模式,您还可以使用默认的系统与其他系统进行交互。
指定认证后台
在后台,Django维护了一个用于检查认证的后台列表。 当某个人调用 django.contrib.auth.authenticate() (如14章中所述)时,Django会尝试对其认证后台进行遍历认证。 如果第一个认证方法失败,Django会尝试认证第二个,以此类推,一直到尝试完。
认证后台列表在AUTHENTICATION_BACKENDS设置中进行指定。
它应该是指向知道如何认证的Python类的Python路径的名字数组。 这些类可以在你Python路径的任何位置。
默认情况下,AUTHENTICATION_BACKENDS被设置为如下:
('django.contrib.auth.backends.ModelBackend',)
那就是检测Django用户数据库的基本认证模式。
AUTHENTICATION_BACKENDS的顺序很重要,如果用户名和密码在多个后台中都是有效的,那么Django将会在第一个正确匹配后停止进一步的处理。
编写认证后台
一个认证后台其实就是一个实现了如下两个方法的类: get_user(id) 和 authenticate(**credentials)
。
方法 get_user 需要一个参数 id ,这个 id 可以是用户名,数据库ID或者其他任何数值,该方法会返回一个 User
对象。
方法 authenticate 使用证书作为关键参数。
大多数情况下,该方法看起来如下:
class MyBackend(object):
但是有时候它也可以认证某个短语,例如:
class MyBackend(object):
每一个方法中, authenticate 都应该检测它所获取的证书,并且当证书有效时,返回一个匹配于该证书的 User
对象,如果证书无效那么返回 None 。 如果它们不合法,就返回None。
Django管理系统紧密连接于其自己后台数据库的 User 对象。
实现这个功能的最好办法就是为您的后台数据库(如LDAP目录,外部SQL数据库等)中的每个用户都创建一个对应的Django
User对象。 您可以提前写一个脚本来完成这个工作,也可以在某个用户第一次登陆的时候在 authenticate
方法中进行实现。
以下是一个示例后台程序,该后台用于认证定义在 setting.py
文件中的username和password变量,并且在该用户第一次认证的时候创建一个相应的Django User
对象。
from django.conf import settings
from django.contrib.auth.models import User, check_password
class SettingsBackend(object):
更多认证模块的后台, 参考Django文档。
相关文章
- python-django项目-Linux系统建立django项目_20191117
- python私有工具库小结
- python的前后端分离(一):django+原生js实现get请求
- python: 安装DeOldify库:黑白图片上色(Python 3.7.15)
- Python 字符串_python 字符串截取_python 字符串替换_python 字符串连接
- python django设置中文及时区
- Python Django 配置静态资源访问(settings配置)
- Python Django的分页插件使用示例
- Python Django URL传参代码示例
- Python Django开发案例:POST方式实现登录功能
- Python语言学习:python语言代码调试—异常处理之详细攻略
- Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(LabelFrame/Checkbutton/Radiobutton)
- Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(text.insert/link各种事件)
- Python 实现个人博客系统(附零基础python学习资料)
- Python自动生成手绘、证件照、九宫格...太炫酷了(附零基础学习资料)
- 迭代加速——逐次超松弛迭代法(Python实现)
- 实践解读丨Python 面向对象三大特征之多态
- python 结构化数据解析
- 【 华为OD机试 2023】 上班之路/是否能到达公司(C++ Java JavaScript Python)
- Python编程:Django中的Request对象常用属性
- Python编程:sanic异步web框架
- Python编程:Django中使用Celery执行异步任务和定时任务
- 百度网盘python客户端——筑梦之路
- python小游戏——像素鸟代码开源