Django的LDAP数据库后端
项目描述
django-ldapdb 是Django的LDAP数据库后端,允许通过Django模型来操作LDAP条目。
它支持与Django模型相同的多数API
MyModel.objects.create()
MyModel.objects.filter(x=1, y__contains=2)
完整的管理员支持和浏览
django-ldapdb 支持所有上游支持的Django版本,基于 Django支持策略。
对于当前版本,以下版本得到支持
Django 2.2(LTS),在Python 3.6 - 3.8(Python 3.5已达到其生命周期的结束);
Django 3.0,在Python 3.6 - 3.8;
Django 3.1,在Python 3.6 - 3.8。
安装django-ldapdb
Linux
使用pip: pip install django-ldapdb
您可能还需要您发行版中常用的 LDAP 软件包,通常命名为 openldap 或 ldap-utils。
Windows
django-ldapdb 依赖于 python-ldap <https://pypi.python.org/pypi/python-ldap> 项目。您可以遵循 其Windows安装指南,或者从 https://www.lfd.uci.edu/~gohlke/pythonlibs/#python-ldap 安装预构建版本(选择与您的Python/Windows组合匹配的 .whl 文件,并使用 pip install python-ldap-3...whl 安装)。
然后您可以使用以下命令安装 django-ldapdb:
pip install django-ldapdb
使用 django-ldapdb
将以下内容添加到您的 settings.py
DATABASES = {
'ldap': {
'ENGINE': 'ldapdb.backends.ldap',
'NAME': 'ldap://ldap.nodomain.org/',
'USER': 'cn=admin,dc=nodomain,dc=org',
'PASSWORD': 'some_secret_password',
},
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
},
}
DATABASE_ROUTERS = ['ldapdb.router.Router']
如果您想在您的应用程序中访问posixGroup条目,您可以在您的 models.py 中添加类似的内容
from ldapdb.models.fields import CharField, IntegerField, ListField
import ldapdb.models
class LdapGroup(ldapdb.models.Model):
"""
Class for representing an LDAP group entry.
"""
# LDAP meta-data
base_dn = "ou=groups,dc=nodomain,dc=org"
object_classes = ['posixGroup']
# posixGroup attributes
gid = IntegerField(db_column='gidNumber', unique=True)
name = CharField(db_column='cn', max_length=200, primary_key=True)
members = ListField(db_column='memberUid')
def __str__(self):
return self.name
def __unicode__(self):
return self.name
并将其添加到您的 admin.py
from django.contrib import admin
from . import models
class LDAPGroupAdmin(admin.ModelAdmin):
exclude = ['dn', 'objectClass']
list_display = ['gid', 'name']
admin.site.register(models.LDAPGroup, LDAPGroupAdmin)
- 重要说明
您必须声明一个用于主键的属性。该属性将扮演特殊角色,因为它将被用于构建条目的相对区分名称。
例如,在上面的示例中,cn为foo 的组将具有DN cn=foo,ou=groups,dc=nodomain,dc=org。
支持的字段
djanglo-ldapdb 提供以下字段,所有字段均来自 ldapdb.models.fields
类似于Django
IntegerField
FloatField
BooleanField
CharField
ImageField
DateTimeField
- 特定于LDAP服务器
ListField(包含文本值列表)
TimestampField(将日期时间存储为posix时间戳,通常用于posixAccount)
- 遗留
DateField(以任意格式存储日期。LDAP服务器没有“日期”的概念)
调整 django-ldapdb
您可以通过在 DATABASE 部分定义一些参数来调整 django-ldapdb 的行为
- PAGE_SIZE(默认值:1000)
定义服务器返回的查询结果页面的最大大小
- QUERY_TIMEOUT(默认值:无限制)
定义我们等待从服务器获得回复的最大时间(按查询基础)。
使用LDAP服务器进行开发
当针对LDAP服务器进行开发时,经常发现访问开发LDAP服务器非常有用。
django-ldapdb 使用 volatildap 项目 来实现此目的
为每个 TestClass 实例化一个 LDAP 服务器;
在每次测试函数开始时重置其内容;
它可以定制以携带应用程序所需的任何模式;
从 volatildap 1.4.0 版本开始,volatildap 服务器可以远程控制,避免了在主机上安装LDAP服务器的需要。
使用 django-ldapdb 的应用程序可以在设置测试时使用以下代码片段
# This snippet is released in the Public Domain
from django.conf import settings
from django.test import TestCase
import volatildap
class LdapEnabledTestCase(TestCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.ldap = volatildap.LdapServer(
# Load some initial data
initial={'ou=people': {
'ou': ['people'],
'objectClass': ['organizationalUnit'],
}},
# Enable more LDAP schemas
schemas=['core.schema', 'cosine.schema', 'inetorgperson.schema', 'nis.schema'],
)
# The volatildap server uses specific defaults, and listens on an arbitrary port.
# Copy the server-side values to Django settings
settings.DATABASES['ldap']['USER'] = cls.ldap.rootdn
settings.DATABASES['ldap']['PASSWORD'] = cls.ldap.rootpw
settings.DATABASES['ldap']['NAME'] = cls.ldap.uri
def setUp(self):
super().setUp()
# Starting an already-started volatildap server performs a data reset
self.ldap.start()
@classmethod
def tearDownClass(cls):
# Free up resources on teardown.
cls.ldap.stop()
super().tearDownClass()
项目详细信息
django-ldapdb-1.5.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5ea333c3130abbb86f8629766370a7f490878706469fce4e5008e41fb566392a |
|
MD5 | 99f8fad6fc4bded9c872cdb4d7a0c440 |
|
BLAKE2b-256 | bd9f8e2f4fa4295ab06533de57bd70a2ceeb5a84c405f8868efc991c82b119f2 |
django_ldapdb-1.5.1-py2.py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2daee828a7eb1ce6ad0634ce5311339d77c08128829e575ff14d62a46771b86a |
|
MD5 | 89a5effb6398af647a97c53b7b47ad5a |
|
BLAKE2b-256 | a1f248c06dc793e8b15f87df76ebe3cc84738b8a7b1af6573b2e2fb325b84711 |