Добавление стандартных инструментов ввода

dobavlenie standartnyh instrumentov vvoda Сценарии на стороне сервера

До сих пор мы вводили данные в текстовые поля. Но формы HTML поддерживают ряд элементов ввода (которые в традиционных графических интерфейсах мы называли виджетами) для получения данных, вводимых пользователем. Рассмотрим программу CGI, которая демонстрирует сразу все стандартные элементы для ввода. Как обычно, определим файл HTML для страницы формы и CGI-сценарий на языке Python для обработки введенных данных и создания ответной страницы. Файл HTML представлен в примере 15.11.

Пример 15.11. PP4E\Internet\Web\tutor5a.html

<HTML><TITLE>CGI 101</TITLE>

<BODY>

<H1>Common input devices</H1>

<HR>

<FORM method=POST action="cgi-bin/tutor5.py">

<H3>Please complete the following form and click Send</H3> <P><TABLE>

<TR>

<TH align=right>Name:

<TD><input type=text name=name>

<TR>

<TH align=right>Shoe size:

<TD><table>

<td><input type=radio name=shoesize value=small>Small

<td><input type=radio name=shoesize value=medium>Medium <td><input type=radio name=shoesize value=large>Large </table>

<TR>

<TH align=right>Occupation:

<TD><select name=job>

<option>Developer

<option>Manager

<option>Student

<option>Evangelist

<option>Other

</select>

<TR>

<TH align=right>Political affiliations:

<TD><table>

<td><input type=checkbox name=language value=Python>Pythonista

<td><input type=checkbox name=language value=Perl>Perlmonger

<td><input type=checkbox name=language value=Tcl>Tcler

</table>

<TR>

<TH align=right>Comments:

<TD><textarea name=comment cols=30 rows=2>

Enter text here</textarea>

<TR>

<TD colspan=2 align=center>

<input type=submit value="Send">

</TABLE>

</FORM>

<HR>

</BODY></HTML>

При отображении в броузере появляется страница, изображенная на рис. 15.13

Как и прежде, эта страница содержит обычное текстовое поле, а также переключатели, окно раскрывающегося списка, группу флажков для выбора нескольких вариантов и область ввода многострочного текста. Для всех них в файле HTML задан параметр name, идентифицирующий выбранное ими значение в данных, отправляемых клиентом серверу. Если заполнить эту форму и щелкнуть на кнопке отправки Send (Передать), на сервере будет запущен сценарий из примера 15.12, который обработает все входные данных, введенные с клавиатуры или выбранные на форме.

Пример 15.12. PP4E\Internet\Web\cgi-bin\tutor5.py

#!/usr/bin/python

выполняется на стороне сервера, читает данные формы, выводит разметку HTML

import cgi, sys

form = cgi.FieldStorage() # извлечь данные из формы

print("Content-type: text/html") # плюс пустая строка

html = """

<TITLE>tutor5.py</TITLE>

<H1>Greetings</H1>

<HR>

<H4>Your name is %(name)s</H4>

<H4>You wear rather %(shoesize)s shoes</H4>

<H4>Your current job: %(job)s</H4>

<H4>You program in %(language)s</H4>

<H4>You also said:</H4>

<P>%(comment)s</P>

<HR>"""

data = {}

for field in (‘name’, ‘shoesize’, ‘job’, ‘language’, ‘comment’) if not field in form:

data[field] = ‘(unknown)’

else:

if not isinstance(form[field], list):

data[field] = form[field].value

else:

values = [x.value for x in form[field]]

data[field] = ‘ and ‘.join(values)

print(html % data)

Рис. 15.13. Страница формы ввода, генерируемая файлом tutor5a.html

Этот сценарий Python не очень сложен; в основном он просто копирует данные из полей формы в словарь с именем data, чтобы их можно было легко вставить в заключенную в тройные кавычки строку ответа. Стоит пояснить некоторые использованные приемы:

Проверка правильности полей

Как обычно, необходимо проверить все ожидаемые поля ввода и убедиться в их присутствии во входных данных с помощью оператора in словарей. Некоторые или все поля ввода могут отсутствовать, если на форме в них не были введены данные или они не были добавлены в строку адреса URL.

Использованная литература:

Марк Лутц — Программирование на Python, 4-е издание, II том, 2011

Каталог сайтов Всего.ру
Оцените статью
Секреты программирования
Добавить комментарий