2016-06-10 10 views
2

In einer Umgebung mit Python CGI, ich den folgenden Code verwendet, um Werte aus einer GET/POST-Anforderung zu drucken:Warum sind die ersten beiden Argumente von cgi.FieldStorage Keine?

import cgi 
print(cgi.FieldStorage()) 

Die Ausgabe lautet:

FieldStorage(None, None, [MiniFieldStorage('name', 'john')]) 

Hier lieferte ich die name Parameter mit einem Wert von 'john', und ich habe es wie erwartet.

Aber warum sind die ersten beiden Werte None? Wofür werden sie verwendet und was halten sie?

Antwort

0

Laut der Quelle des cgi.py Modul, die FieldStorage.__repr__ Methode ist:

def __repr__(self): 
    """Return a printable representation.""" 
    return "FieldStorage(%r, %r, %r)" % (
      self.name, self.filename, self.value) 

Sowohl namefilename und optionale Werte sind. Für FieldStorage werden die automatisch aus dem Header content-disposition, falls vorhanden, festgelegt.

name scheint für diese FieldStorage als Schlüssel verwendet werden, wenn die dict -Stil Methoden wie keys und __getitem__ verwenden.

filename wird von CGI-Skripten verwendet, die Datei-Uploads akzeptieren.

Wenn Sie eine MiniFieldStorage („für den Einsatz, wenn keine Datei-Uploads sind möglich“) erhalten, ist es __repr__ ist nur:

def __repr__(self): 
    """Return printable representation.""" 
    return "MiniFieldStorage(%r, %r)" % (self.name, self.value) 

Wie oben, abzüglich der filename Feld. Im Gegensatz zu FieldStorage nimmt es den Wert name in __init__ und tut nichts damit, außer es in __repr__ wiederholen. (Es wird wahrscheinlich auch als Wörterbuchschlüssel verwendet ... irgendwo.)

Die Doc-Strings für diese zwei Klassen sind, ehrlich gesagt, viel besser als das, was Sie in der cgi module's official docs finden können. (Auch die FieldStorage Klasse tut ein Los von verschiedenen Dingen, so dass es schwierig ist, in Worten zu beschreiben.)