django的ldap数据库后端
django-ldapdb的Python项目详细描述
django-ldapdb是django的ldap数据库后端,允许操作 通过django模型的ldap条目。
它支持大多数与django模型相同的api:
- MyModel.objects.create()
- MyModel.objects.filter(x=1, y__contains=2)
- 全面的管理支持和浏览
django-ldapdb支持django版本1.11/2.1/2.2和python 2.7/3.4/3.5/3.6/3.7, 就django和python版本而言是兼容的。
安装django ldapdb
Linux
使用pip:pip install django-ldapdb
您可能还需要发行版中通常的LDAP包,通常命名为openldap或ldap-utils。
窗口
django-ldapdb取决于python ldap<;https://pypi.python.org/pypi/python ldap>;项目。 要么跟着its Windows installation guide, 或者从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:
fromldapdb.models.fieldsimportCharField,IntegerField,ListFieldimportldapdb.modelsclassLdapGroup(ldapdb.models.Model):""" Class for representing an LDAP group entry. """# LDAP meta-database_dn="ou=groups,dc=nodomain,dc=org"object_classes=['posixGroup']# posixGroup attributesgid=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):returnself.namedef__unicode__(self):returnself.name
并将其添加到您的admin.py:
fromdjango.contribimportadminfrom.importmodelsclassLDAPGroupAdmin(admin.ModelAdmin):exclude=['dn','objectClass']list_display=['gid','name']admin.site.register(models.LDAPGroup,LDAPGroupAdmin)
- 重要提示:
必须声明一个属性作为主键。 此属性将发挥特殊作用,因为它将用于生成 条目的相对可分辨名称。
例如,在上面的示例中,cn为^{tt17}的组$ 将具有dncn=foo,ou=groups,dc=nodomain,dc=org。
支持的字段
djanglo ldapdb提供以下字段,全部从ldapdb.models.fields导入:
与django类似:
- ^{tt20}$
- ^{tt21}$
- ^{tt22}$
- ^{tt23}$
- ^{tt24}$
- ^{tt25}$
- 特定于LDAP服务器:
- ListField(保存文本值列表)
- TimestampField(将日期时间存储为posix时间戳,通常用于posixaccount)
- 传统:
- DateField(以任意格式存储日期。ldap服务器没有Date的概念。
调整django ldapdb
可以通过在DATABASE部分中定义几个参数来调整django ldapdb的行为:
- PAGE_SIZE(默认值:1000)
- 定义要由服务器< /DD>返回的结果页的最大大小
- QUERY_TIMEOUT(默认:无限制)
注意
此设置适用于单个请求;如果高级操作需要许多 查询(例如一个分页的搜索,产生数千个条目) 超时将用于每个单独的请求; 整个处理时间可能要高得多。