Я следовал инструкциям в django-ldap README , и я не могу заставить django-ldapdb вести себя так, как будто он выполняет запрос LDAP. Следующее было отредактировано на новом экземпляре Django v.2.1.2 с использованием Python 3.7:
Меняется на 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)
Запуск сервера разработки Django в отладчике PyCharm. Я вижу, что result
получает QuerySet
с сообщением:
Unable to get repr for <class 'django.db.models.query.QuerySet'>
Что я имею в виду под "сообщением". Честно говоря, я не уверен, но отладчик показывает это:
Кроме того, кажется, что хотя db
член QuerySet
является 'ldap', а query
показывает SQL-запрос, а не фильтр LDAP. Когда я проследил HTTP-запрос по URL-маршрутизации, представлению, запросу, а затем по результату, я ни разу не увидел, чтобы он делал какие-либо вызовы, связанные с LDAP. Для правильной меры я исказил пароль привязки LDAP, и я не получаю ошибку привязки. Я уверен, что мне не хватает того, что позволяет Django знать, что я хочу работать с LDAP на данном этапе ... Я просто не знаю, что это такое.