GET variable

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
DER Olf
User
Beiträge: 283
Registriert: Mittwoch 24. Dezember 2003, 19:32

hi.

ich habe ein kleines problem. ich versuche ein bisschen mit GET variablen rumzuspielen.
aber so wie ich das von PHP kenne funzt es ned.
ich hab mir mal ein kleines script angeguckt (von dr. web oder so)

Code: Alles auswählen

import cgitb; cgitb.enable()
import cgi

puffer = cgi.FieldStorage()
meine erste frage:
WAS ist cgi.FieldStorage()

und dann hab ich einfach mal rumprobiert:

Code: Alles auswählen

print "Content-Type: text/html \n\n"
print puffer["wert"]
und hab die seite mit

http://localhost/cgi-bin/test.py?wert=hallo

aufgerufen.

ausgabe:

Code: Alles auswählen

MiniFieldStorage('wert', 'hallo')
und WAS bedeutet jetzt diese ausgabe?

ich würde gerne etwas nach diesem muster schreiben:

Code: Alles auswählen

if GET-Wert = "hallo":
    print "hallo ist der wert"
elif GET-Wert = "welt":
    print "die welt grüßt dich"
else:
    print "fehler im script"
mfg

Olf
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Hi. Also mal ganz von vorne. mit cgi.FieldStorage() wir eine Instanz der Klasse FieldStorage erzeugt, die alle Werte die durch irgendeine Methode an ein CGI-Script übergeben wurden einsammelt. Diese Klasse lässt sich ganz recht wie ein Dictionary handhaben, aber so einfach kommt man nicht an die Werte heran.

So musst du stattdessen puffer["wert"].value ansetzen um an dein "Hallo" zu kommen. Das kommt daher, dass puffer["wert"] wiederum eine Unterinstanz von FielStorage ist (alle Werte werden rekursiv eingesammelt). So sieht das etwas komisch aus, ist aber z.B. für Dateiuploads notwendig. So ist dann z.B. in puffer["datei"].value der Dateiinhalt gespeichert, während alle anderen Daten wie Dateiname, etc durch die Unterinstanz näher beschrieben sind. Sieh dir dazu mal den unteren Teil in der Docu hier an.

Willst du stattdessen nur schnell den wert eines Feldes haben, weil du weißt, dass dies kein Dateifeld ist geht das auch:

Code: Alles auswählen

value=puffer.getvalue("wert","Alternativwert_falls_wert_nicht_existiert")
Dazu ist aber auch wieder etwas zu sagen: es ist bei HTML ja möglich, dass mehrere Felder denselben Namen tragen (z.B. bei mehreren Checkbuttons). In diesem Fall liefert getvalue eine Liste, statt eines einzelnen Wertes. Dies kann unerwünscht sein, weil man nicht weiß ob man nun eine Liste oder nur einen Wert erhält. Aus diesen Grund gibt es noch zwei weitere Methoden: getfirst und getlist. getfirst liefert nur den ersten Wert (nützlich, wenn man wirklich nur einen Wert will) und getlist liefert in jedem Fall immer eine Liste.

Um also auf dein Beispiel zurück zukommen, musst du etwas in der Art hier anstellen:

Code: Alles auswählen

puffer=cgi.FieldStorage()
v=puffer.getfirst("wert")
if v == "hallo": 
    print "hallo ist der wert" 
elif v == "welt": 
    print "die welt grüßt dich" 
else: 
    print "fehler im script"
Milan
Zuletzt geändert von Milan am Sonntag 4. April 2004, 17:23, insgesamt 1-mal geändert.
DER Olf
User
Beiträge: 283
Registriert: Mittwoch 24. Dezember 2003, 19:32

danke.

is ja eigentlich recht einfach..... :oops:
GastTabellar

Hallo Milan,

ich bin gerade an einer FileUpload-Geschichte dran. Es funktioniert eigentlich
auch alles, nur habe ich das Problem, dass ich den "Dateinamen" aus FieldStorage selektieren kan...
Milan hat geschrieben: So ist dann z.B. in puffer["datei"].value der Dateiinhalt gespeichert, während alle anderen Daten wie Dateiname, etc durch die Unterinstanz näher beschrieben sind. Sieh dir dazu mal den unteren Teil in der Docu hier an.
Ich hab mal in der Doku nachgeschaut, aber ich bekomme den Dateinamen
immer noch nicht heraus...

Code: Alles auswählen

#!/usr/bin/env python
import cgi

form = cgi.FieldStorage()

print "Content-Type: text/plain"
print

if form.has_key("filename"):
    item = form["filename"]
    if item.file:
        data = item.file.read()
        print data

        #Dateiname=??????????
        print Dateiname        
        
    else:
        print 'Probleme...'
else:
    print 'Keine Datei angegeben.'
Könnt Ihr mir helfen???

Gruss
Tabellar
Gast

... wenn man ein bisschen sucht, findet man doch noch was...

Code: Alles auswählen

 
...
Dateiname=item.filename
print Dateiname
...
Gruss
Tabellar
Antworten