跳转到主要内容

Django的LDAP数据库后端

项目描述

https://secure.travis-ci.org/django-ldapdb/django-ldapdb.png?branch=master Latest Version Supported Python versions Wheel status License

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 软件包,通常命名为 openldapldap-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 (31.8 kB 查看哈希值)

上传时间

构建分布

django_ldapdb-1.5.1-py2.py3-none-any.whl (22.7 kB 查看哈希值)

上传时间 Python 2 Python 3