我已经按照 django-ldap README中的说明进行操作,但我似乎无法让 django-ldapdb 表现得像在进行 LDAP 查询一样。以下内容已在使用 Python 3.7 的全新 Django v.2.1.2 实例上进行了编辑:
更改为settings.py
:
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
:
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)
我认为的查询。首先我试过:
result = MyPerson.objects.filter(uid=99894)
然后我尝试了:
result = MyPerson.objects.using('ldap').filter(uid=99894)
在 PyCharm 的调试器中运行 Django 开发服务器,我可以看到result
收到QuerySet
一条消息:
Unable to get repr for <class 'django.db.models.query.QuerySet'>
我所说的“消息”是什么意思。老实说,我不确定,但调试器显示了这一点:
此外,似乎虽然db
成员QuerySet
是“ldap”,但该query
成员显示的是 SQL 查询,而不是 LDAP 过滤器。当我通过 URL 路由、视图、查询和结果跟踪 HTTP 请求时,我从未见过它进行任何类型的 LDAP 相关调用。为了更好地衡量,我破坏了 LDAP 绑定密码,并且没有收到绑定错误。很确定我错过了一些让 Django 知道我现在想使用 LDAP 的东西……我只是不知道那是什么。