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 |