首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让django-ldapdb将数据源识别为LDAP

如何让django-ldapdb将数据源识别为LDAP
EN

Stack Overflow用户
提问于 2018-11-14 07:43:32
回答 1查看 394关注 0票数 2

我遵循了django-ldapdb中的说明,但我似乎无法让django-ldapdb表现得像是在进行README查询。使用Python 3.7在全新的Django v.2.1.2实例上编辑了以下内容:

settings.py的更改

代码语言:javascript
复制
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    },
    'ldap': {
        'ENGINE': 'ldapdb.backends.ldap',
        'NAME': 'ldaps://my.server',
        'USER': 'cn=some user',
        'PASSWORD': 'somePassword',
    }
}
DATABASE_ROUTERS = ['ldapdb.router.Router']

新的models.py

代码语言:javascript
复制
class MyPerson(ldapdb.models.Model):
        base_dn = "ou=people,dc=ucsf,dc=edu"
        object_classes = ['person', 'myPerson]

        uid = fields.IntegerField(db_column='uid')
        displayname = fields.CharField(db_column='displayname')
        eid = fields.CharField(db_column='eid')

        def __str__(self):
            return str(self.uid)

        def _unicode__(self):
            return str(self.uid)

我视图中的查询。首先,我尝试了:

代码语言:javascript
复制
result = MyPerson.objects.filter(uid=99894)

然后我试着:

代码语言:javascript
复制
result = MyPerson.objects.using('ldap').filter(uid=99894)

在PyCharm的调试器中运行Django dev服务器,我可以看到result接收到一个QuerySet,其中包含以下消息:

代码语言:javascript
复制
Unable to get repr for <class 'django.db.models.query.QuerySet'>

我说的“消息”是什么意思。老实说,我不确定,但调试器显示:

此外,似乎QuerySetdb成员是' LDAP ',并且query成员显示的是SQL查询,而不是LDAP筛选器。当我通过URL路由跟踪HTTP请求、视图、查询,然后是结果时,我从未见过它发出任何与LDAP相关的调用。另外,我破坏了LDAP绑定密码,并且没有收到绑定错误。我很确定我错过了一些让Django知道我想在这一点上使用LDAP的东西...我只是不知道那是什么。

EN

回答 1

Stack Overflow用户

发布于 2018-11-14 08:48:31

由于LDAPdoes不代表关系数据库,并且通常具有通过配置创建的模式,而不是通过查询创建的模式,因此我从来没有意识到我需要运行manage.py makemigrationsmanage.py migrate。(我对Python比较陌生,对Django更是如此。(我过去为LDAP使用和扩展的多数据源ORM不需要类似的准备工作。)凭直觉,我对我的LDAP模型运行了manage.py命令,然后再次尝试我的代码。现在它起作用了。

我在PHP Symfony上工作了几年,还写过ucsf-iam/UcsfLdapOrm。虽然Symfony也有一个数据库迁移过程,因为LDAP模式是相当静态的,当我写LDAP ORM时,我硬编码了Django迁移动态处理的一部分。其余部分由模型类中的PHP注释处理,类似于Django具有pythonic字段类型并将它们与LDAP属性类型相关联。现在我更好地理解了这一切,我对Django如何设置ORM有了更深的理解。

我希望这对其他转向Python和Django的LDAP开发人员有指导意义。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53291103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档