?
Анимация
JavaScript
|
Главная Библионтека 27.1.3 Дополнительные возможности модуля Модуль cgi определяет также дополнительные функции, которые будут полезны, если необходим более тонкий контроль. parse ([**keyord args]) Обрабатывает данные со стандартного потока ввода и/или из переменных окружения в соответствии со стандартом CGI1 и возвращает словарь, отображающий именем. В последнем случае метод getvalue() также возвращает список строковых значений полей. Если в Вашем случае возможно присутствие нескольких полей с одинаковым именем, используйте встроенную функцию type() для определения типа: value = form.getvalue("username", "") if type(value) is type([]): # Заполнено несколько полей с именем пользователя usernames = ",".join(value) else: # Заполнено не более одного поля с именем # пользователя usernames = value Если объект представляет загружаемый файл, при обращении к атрибуту value весь файл считывается в память в виде строки. Такое поведение не всегда желательно. Вы можете определить, представляет ли объект загружаемый файл, по значению атрибута filename или file: fileitem = form["userfile"] if fileitem.file: # Объект fileitem представляет загружаемый файл. # Подсчитываем строки, не сохраняя весь файл в # памяти, linecount = 0 while 1: if fileitem.file.readline() linecount += 1 else: break Проект стандарта по организации загрузки файлов принимает во внимание возможность загрузки нескольких файлов из одного поля HTML-формы (рекурсивно используя multipart/*). В этом случае объект будет являться отображением, с которым можно работать аналогично объекту, представляющему всю форму. Вы можете определить такой объект по значению атрибута type (obj.type and obj .type.startswith(multipart/) ). имена полей к спискам значений. Функция воспринимает именованные аргументы fp, environ, keep blank values и strict parsing, которые имеют такое же значения, как и для конструктора класса FieldStorage (см. раздел 27.1.2). parse qs(gs [, **keyword args]) Обрабатывает строку запроса, переданную в качестве аргумента qs (данные типа application/x-www-form-urlencoded ), и возвращает словарь, отображающий имена полей к спискам значений. Функция воспринимает именованные аргументы keep blank values и strict parsing, которые имеют такое же значение, как и для конструктора класса FieldStorage (см. раздел 27.1.2). parse qsl(qs [, **keyword args]) Работает аналогично функции parse qs(), но возвращает список кортежей с именем поля и его значением. parse multipart(fp, pdict) Обрабатывает данные в виде multipart/form-data из потока fp и возвращает словарь, отображающий имена полей к спискам значений. Аргумент pdict должен быть словарем, содержащим параметры из заголовка Content-Type . Заметим, что эта функция не обрабатывает вложенные multipart/* части. Кроме того, она полностью считывает файл в память, что может быть нежелательным при загрузке больших файлов. Класс FieldStorage не обладает этими недостатками. parse header( string) Обрабатывает MIME-заголовок в строке string и возвращает кортеж, содержащий основное значение и словарь параметров. Предполагается, что строка string не содержит самого имени заголовка, то есть для заголовка Content-Type: text/plain; encoding=koi8-r аргумент должен быть равен text/plain; encoding=koi8-r. test() Эта функция реализует готовую CGI-программу, предназначенный для тестирования: выводит минимальный HTTP-заголовок и всю переданную программе информацию в формате HTML. Функция test() вызывается при использовании файла модуля cgi.py в качестве программы. print environ() Выводит информацию о переменных окружения в формате HTML. print form( form) Выводит значения полей формы, представленной объектом form (должен быть экземпляром класс FieldStorage), в формате HTML. print directory() Выводит содержимое текущего каталога в формате HTML. print environ usage() Выводит список переменных окружения, которые могут быть использованы CGI-программой. 27.1.4 Вопросы безопасности Существует одно важное правило: если Вы запускаете внешнюю программу или считывает или записываете файл, убедитесь, чтобы в качестве параметров соответствующих функций (например, os.system() , os.popen*() , os.exec*() , os.spawn*() , open()) не использовались произвольные строки, полученные от клиента. Не следует доверять даже частям URL и именам полей, так как они могут поступить вовсе не из Вашей формы. Если Вам все же необходимо использовать строки, полученные из формы, для составления команды shell или пути к файлу, убедитесь, что они содержат только безопасные символы (не содержит символов, имеющих специальное значение). 27.1.5 Установка CGI-программы Поместите Вашу программу в каталог, предназначенный для CGI-программ (обычно это cgi-bin). Убедитесь, что пользователь, от имени которого запущен HTTP-сервер, имеет доступ на чтение и выполнение программы. В операционных системах UNIX первая строка программы должна начинаться с #!, после чего должен следовать полный путь к интерпретатору, например: #!/usr/local/bin/python escape (s [, quote]) Заменяет символы < и > в строке s на соответствующие сущности HTML. Используйте эту функцию для вывода текста, который может содержать такие символы. Если задан и является истиной аргумент quote, также заменяет символ двойной кавычки ( " ), что может быть полезно для вывода значений атрибутов (например, a href=" + escape(url, 1) + ). Кроме того, модуль предоставляет средства для ведения log-файла: logfile Если эта переменная имеет непустое значение, она определяет имя log-файла. Используется только, если переменная logfp является ложью. logfp Файловый (или подобный) объект, соответствующий log-файлу. log (format [, *args]) Записывает строкуformat % args + \n в log-файл, определяемый значениями переменных logfile и logfp при первом вызове функции. Если в момент первого вызова этой функции обе переменный являются ложью, этот и все последующие вызовы функции ничего не делают. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 [ 114 ] 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |