Uppercase im Dictinary

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
hardez
User
Beiträge: 24
Registriert: Montag 19. Oktober 2009, 16:39

Hallo Leute,
ich bin ziemlich neu in der Welt von Python und auch in diesem Forum.
Ich schriebe gerade an einer Webanwendung, mit der man Objecte in einer Active Directory (LDAP) anlegen/verändern kann.
Soweit klappt auch alles mehr oder weniger.

Mein Problem ist nun folgendes. Auf der HTML Seite wird eingegeben welcher User in welcher OU angelegt werden soll.

Soll ein User in einer bestimmten (für Admins reservierten OU) angelegt werden, soll eine Fehlermeldung kommen, dass das nicht erlaubt ist.

So mementan fange ich das mit einer langen "if" Anweisung ab.
Das klappt aber auch nur solange wie einer "normal" schriebt.

Schreibt aber nun jemand "OU: aDmInS" würde mein Script nicht reagieren.
Am besten fängt man sowas aber natürlich ab indem man den String einfach in upper- oder lowercase wandelt.

Python sagt mir nun aber das das nicht möglich sei, da es kein String ist.

Also mein Code sieht so aus:

Code: Alles auswählen

entries=cgi.FieldStorage()
if entries:
    if entries.has_key("usranlegen"):        
        try:
            user={'first':entries['vorname'].value,'last':entries['nachname'].value,'klasse':entries['OU'].value}
            if user['OU'] == 'ADMINS' or user['klasse'] == 'Admins' or user['klasse'] == 'admins':
                print 'Das ist nicht erlaubt'
            else:
                location='LDAP://OU='+user['OU']+',OU=User,DC=meine,DC=domain,DC=de'
Wie kriege ich es nun hin das ich den Inhalt des Dict Feldes 'OU' in upper- oder lowercase bekomme?

Hab auch shcon probiert

Code: Alles auswählen

a=str(user['OU'])
a.uppercase
aber auch das hat nicht geklappt.

Ist mit sicherheit total einfach, ich komm aber nicht drauf!
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Code: Alles auswählen

>>> "Hallo".upper()
'HALLO'
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

"hat nicht geklappt" und "sagt mir, das ist kein String" sind ja klasse - aber was hat nicht geklappt und was ist es denn dann? Das wären wohl wichtige Infos ;-)

Sobald Du einen String hast, speicherst Du eben value.lower() in Deinem dict!
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

hardez hat geschrieben: Schreibt aber nun jemand "OU: aDmInS" würde mein Script nicht reagieren.
Am besten fängt man sowas aber natürlich ab indem man den String einfach in upper- oder lowercase wandelt.

Python sagt mir nun aber das das nicht möglich sei, da es kein String ist.

Also mein Code sieht so aus:

Code: Alles auswählen

entries=cgi.FieldStorage()
if entries:
    if entries.has_key("usranlegen"):        
        try:
            user={'first':entries['vorname'].value,'last':entries['nachname'].value,'klasse':entries['OU'].value}
            if user['OU'] == 'ADMINS' or user['klasse'] == 'Admins' or user['klasse'] == 'admins':
                print 'Das ist nicht erlaubt'
            else:
                location='LDAP://OU='+user['OU']+',OU=User,DC=meine,DC=domain,DC=de'
Woher bitte soll user['OU'] kommen? Schau mal, wie du das Dictionary eigentlich definierst.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

/me hat geschrieben: Woher bitte soll user['OU'] kommen? Schau mal, wie du das Dictionary eigentlich definierst.
Stimmt - aber dann hat er uns eine Exception vorenthalten ;-)

Generell ist so eine händische Authetifizierungs- und Autorisierungslösung natürlich fraglich. Es gibt doch viele nette Libs dafür...
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Hyperion hat geschrieben:Es gibt doch viele nette Libs dafür...
Solange man WSGI verwendet ;)
hardez
User
Beiträge: 24
Registriert: Montag 19. Oktober 2009, 16:39

@numerix Wie gesagt habe ich das bereits probiert
@alle anderen Die Website sendet per <form action="script.py" method="POST"> die Daten an mein Script.
Dieses wird per

Code: Alles auswählen

cgi.FieldStorage()
an eine Variable übergeben (ist also automatisch ein Dict und ich kann da nix vorher konvertieren).
So nun muss ich einen irgendwie ein Feld aus dem Dict in einen Uppercase String umwandeln.
Ich habe aber keine Ahnung wie!

Den Rest hab ich bereits im ersten Post geschrieben...
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

@Dich noch einmal:
Hyperion hat geschrieben:"hat nicht geklappt" und "sagt mir, das ist kein String" sind ja klasse - aber was hat nicht geklappt und was ist es denn dann? Das wären wohl wichtige Infos ;-)

Sobald Du einen String hast, speicherst Du eben value.lower() in Deinem dict!
hardez
User
Beiträge: 24
Registriert: Montag 19. Oktober 2009, 16:39

Ok ich hab grade festgestellt das ich einen Fehler hatte.
Der fehler der kam war das str() kein uppercase kennt...
Is logisch heißt ja auch .upper

Gut wenn ich nun aber user['OU'].upper eingebe kommt:

<built-in method upper of str object at 0xb76b7c20>

mehr nicht.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

hardez hat geschrieben:Ok ich hab grade festgestellt das ich einen Fehler hatte.
Der fehler der kam war das str() kein uppercase kennt...
str() ist eine Funktion, die ein String Objekt zurückliefert; d.h. auf der Rückgabe kannst Du sehr wohl ein upper() aufrufen!

Auch wenn der Code an sich unsinnig ist:

Code: Alles auswählen

In [17]: str("Hallo").upper()
Out[17]: 'HALLO'
Gut wenn ich nun aber user['OU'].upper eingebe kommt:

<built-in method upper of str object at 0xb76b7c20>

mehr nicht.
Ist ja auch klar!

Code: Alles auswählen

In [13]: "Test".upper
Out[13]: <built-in method upper of str object at 0x26aadb0>

In [14]: "Test".upper()
Out[14]: 'TEST'
"upper" ist die Methode des Strings; mit upper() rufst Du diese auf.
hardez
User
Beiträge: 24
Registriert: Montag 19. Oktober 2009, 16:39

argh ich sollte einfach mal ne Pause einlegen, dann kommt man auf sowas evtl auch von allein -.-

Vielen dank!
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

hardez hat geschrieben:@numerix Wie gesagt habe ich das bereits probiert
Hattest du eben nicht. :wink:
Wenn du DAS schon probiert hättest, hätte ich es nicht gepostet.
hardez
User
Beiträge: 24
Registriert: Montag 19. Oktober 2009, 16:39

@numerix
das war Reflex weil normalerweise so ein Post immer von jemandem kommt der den Text garnicht gelesen hat sondern erstma sagen möchte wie es allgemein geht... sorry...
Antworten