Letztes Mal LDAP hinzugefügt und abgerufen. Dieses Mal werde ich zusammenfassen, wie Sie Writer und Reader hinzufügen und verwenden.
ldap3 hat eine Reader-Klasse mit verschiedenen Funktionen. Verwenden Sie diese Option, um LDAP-Informationen abzurufen. Der Reader benötigt eine Verbindung, ein Objekt und einen cn (Suchpfad). Die Beispiele sind grundsätzlich in der Reihenfolge von oben aufgeführt.
Das Objekt wird erstellt, indem der Name des Zielobjekts und die Verbindung an die ObjectDef-Klasse übergeben werden. Dieses Mal möchten wir den Wert von cn annehmen, also geben Sie `` `inetOrgPerson``` an. Wenn Sie möchten, geben Sie das Ziel an, das Sie erhalten möchten, z. B. "organisatorische Einheit".
main.py
from ldap3 import Server, Connection, ObjectDef, Reader
server = Server('localhost')
conn = Connection(server, 'cn=admin,dc=sample-ldap', password='LdapPass')
result = conn.bind()
#InetOrgPerson-Objekterstellung
obj_cn_name = ObjectDef('inetOrgPerson', conn)
Erstellen Sie einen Reader, indem Sie das zuvor erstellte Objekt, die Verbindung und den Suchpfad angeben. Über den zu diesem Zeitpunkt angegebenen Suchpfad können Sie angeben, von welcher Hierarchie Informationen abgerufen werden können. Hier wird der Wert nicht eingegeben, da er nicht nur durch Generieren von Reader gesucht wird.
main.py
#Leader-Generation
data_reader = Reader(conn, obj_cn_name, 'ou=sample-unit,dc=sample-component,dc=sample-ldap')
Sie können eine Liste der LDAP-Werte mit dem Reader `search ()`
abrufen.
main.py
#Suche hier
data = data_reader.search()
#Alle Gegenstände können genommen werden
print(data)
Ergebnis
[DN: cn=sample-name,ou=sample-unit,dc=sample-component,dc=sample-ldap - STATUS: Read - READ TIME: 2020-03-27T20:50:15.470086
cn: sample-name
objectClass: inetOrgPerson
sn: sample1
sample2
st: test2
, DN: cn=sample-name1,ou=sample-unit,dc=sample-component,dc=sample-ldap - STATUS: Read - READ TIME: 2020-03-27T20:50:15.478084
cn: sample-name1
objectClass: inetOrgPerson
sn: sample
]
Wenn Sie sich das Ergebnis ansehen, können Sie sehen, dass alle im Reader angegebenen cn unter `` `ou = sample-unit, dc = sample-component, dc = sample-ldap``` erfasst wurden. Weiterhin wurden die jeweiligen Attributwerte sn und st erfasst.
sample-Sie sollten in der Lage sein, den Namen zu erhalten.
#### **` main.py`**
```py
#Geben Sie die Suchbedingungen an
data = data_reader.search('st')
print(data)
Ergebnis
DN: cn=sample-name,ou=sample-unit,dc=sample-component,dc=sample-ldap - STATUS: Read - READ TIME: 2020-03-27T20:50:15.470086
cn: sample-name
objectClass: inetOrgPerson
sn: sample1
sample2
st: test2
Als ich mir das Ergebnis ansah, bekam ich erwartungsgemäß die cn des Probennamens.
Es gibt eine Funktion, die durch Konvertieren des LDAP-Werts in eine Zeichenfolge im JSON-Format unter Verwendung des Readers `entry_to_json ()`
erhalten werden kann.
main.py
#Kann im JSON-Format bezogen werden
json_str = data[0].entry_to_json()
print(json_str)
print(type(json_str))
Ergebnis
{
"attributes": {
"st": [
"test2"
]
},
"dn": "cn=sample-name,ou=sample-unit,dc=sample-component,dc=sample-ldap"
}
<class 'str'>
Es gibt eine Funktion, die den LDAP-Wert in das Dict-Format konvertieren und mithilfe des Readers `` `entry_attributes_as_dict``` abrufen kann.
main.py
ldap_dict = data[0].entry_attributes_as_dict
print(ldap_dict)
print(type(ldap_dict))
Ergebnis
{'st': ['test2']}
<class 'dict'>
Durch Angabe von cn können Sie nur Informationen für diesen einen cn abrufen.
main.py
#Wenn Sie cn als Pfad verwenden, können Sie nur einen erhalten
data_reader = Reader(conn, obj_cn_name, 'cn=sample-name,ou=sample-unit,dc=sample-component,dc=sample-ldap')
data = data_reader.search()
print(data)
Ergebnis
[DN: cn=sample-name,ou=sample-unit,dc=sample-component,dc=sample-ldap - STATUS: Read - READ TIME: 2020-03-27T21:16:17.284094
cn: sample-name
objectClass: inetOrgPerson
sn: sample1
sample2
st: test2
]
LDAP-Informationen können mithilfe der Writer-Klasse mit verschiedenen Funktionen in ldap3 geschrieben werden. Writer kann mit Reader generiert werden.
Erstellen Sie einen Writer, indem Sie dem Writer `from_cursor ()`
einen Reader geben, der den LDAP-Wert erhält.
Schreiben Sie den Wert, indem Sie einen Wert in die generierte Writer-Variable einfügen und `commit ()`
ausführen.
main.py
from ldap3 import Server, Connection, ObjectDef, Reader, Writer
server = Server('localhost')
conn = Connection(server, 'cn=admin,dc=sample-ldap', password='LdapPass')
result = conn.bind()
#Verwenden Sie den Reader
obj_cn_name = ObjectDef('inetOrgPerson', conn)
data_reader = Reader(conn, obj_cn_name, 'cn=sample-name,ou=sample-unit,dc=sample-component,dc=sample-ldap')
data = data_reader.search()
#Vor dem Aktualisieren anzeigen
print(data[0])
#Lass den Schriftsteller lesen
data_writer = Writer.from_cursor(data_reader)
#Geben Sie den Wert über den Writer ein
data_writer[0].sn = 'sample10'
data_writer[0].sn += 'sample20'
data_writer[0].st = 'test10'
#Reflexion der Änderungsergebnisse
data_writer.commit()
#Anzeige nach dem Update
data_reader2 = Reader(conn, obj_cn_name, 'cn=sample-name,ou=sample-unit,dc=sample-component,dc=sample-ldap')
data2 = data_reader2.search()
print(data2[0])
Ergebnis
DN: cn=sample-name,ou=sample-unit,dc=sample-component,dc=sample-ldap - STATUS: Read - READ TIME: 2020-03-27T21:36:03.493031
cn: sample-name
objectClass: inetOrgPerson
sn: sample1
sample2
st: test1
DN: cn=sample-name,ou=sample-unit,dc=sample-component,dc=sample-ldap - STATUS: Read - READ TIME: 2020-03-27T21:36:03.686030
cn: sample-name
objectClass: inetOrgPerson
sn: sample10
sample20
st: test10
Sie können sehen, dass sich die Werte wie angegeben geändert haben.
Wir haben die Erfassung / Änderung / Hinzufügung von LDAP mit LDAP Reader und Writer zusammengefasst. Ich bin der Meinung, dass die Verwendung von Reader und Writer die Handhabung von LDAP etwas erleichtert. Dies hat es praktisch gemacht, LDAP anstelle von RDB zu verwenden. Dieses Mal habe ich die Quelle auf solide Weise geschrieben, ohne die Struktur zu berücksichtigen, um sie so einfach wie möglich zu gestalten, aber ich denke, dass die Quelle bequemer wird, wenn ich etwas mehr entwerfe.