2016-06-10 2 views
2

В среде Python CGI, я использовал следующий код для печати значений из запроса GET/POST:Почему первые два аргумента cgi.FieldStorage None?

import cgi 
print(cgi.FieldStorage()) 

Выход есть:

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

Здесь я снабжал параметр name с значение 'john', и я получил его, как ожидалось.

Но почему первые два значения None? Для чего они используются и что они держат?

ответ

0

Согласно источнику cgi.py модуля, метод FieldStorage.__repr__ является:

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

Оба name и filename необязательные значения. Для FieldStorage автоматически устанавливаются из заголовка content-disposition, если таковые имеются.

name, кажется, используется в качестве ключа для этого FieldStorage при использовании dict -Style методы, как keys и __getitem__.

filename Используется скриптами CGI, которые принимают загрузки файлов.

Если вы получаете MiniFieldStorage («для использования, когда нет файла загрузка не возможна»), это __repr__ просто:

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

же, как указано выше, минус filename поля. В отличие от FieldStorage, он принимает значение name в __init__ и ничего не делает с ним, кроме повторения в __repr__. (Вероятно, он также используется в качестве словарного ключа ... где-то.)

Док-струны для этих двух классов, честно говоря, намного лучше, чем то, что вы можете найти в cgi module's official docs. (Кроме того, класс FieldStorage делает лот разных вещей, из-за чего трудно описать словами.)

Смежные вопросы