Табличная верстка форм

tablichnaya verstka form Сценарии на стороне сервера

Теперь возьмем что-нибудь более реальное. В большинстве CGI-приложений на страницах с формами ввода присутствуют несколько полей. Когда полей больше одного, метки и поля для ввода обычно располагаются в виде таблицы, чтобы придать форме структурированный внешний вид. Файл HTML в примере 15.9 определяет форму с двумя полями ввода.

Пример 15.9. PP4E\Internet\Web\tutor4.html

<html>

<title>CGI 101</title>

<body>

<H1>A second user interaction: tables

</H1>

<hr>

<form method=POST action="cgi-bin/tutor4.py">

<table>

<TR>

<   TH align=right>Enter your name:

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

<TR>

<   TH align=right>Enter your age:

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

<TR>

<   TD colspan=2 align=center>

<input type=submit value="Send">

</table>

</form>

</body></html>

Тег <TH> определяет колонку, как и <TD>, но также помечает ее как колонку заголовка, что обычно означает вывод ее полужирным шрифтом. Размещая поля ввода и метки в такой таблице, получаем страницу ввода, изображенную на рис. 15.10. Метки и поля ввода автоматически выравниваются по вертикали в колонках подобно тому, как это обеспечивалось менеджерами компоновки графического интерфейса из библиотеки tkinter, с которыми мы встречались ранее в этой книге.

Рис. 15.10. Форма, скомпонованная с помощью тегов таблиц

 

При нажатии кнопки отправки на этой форме (с надписью Send (Передать)) на сервере будет запущен сценарий из примера 15.10 со входными данными, введенными пользователем.

Пример 15.10. PP4E\Internet\Web\cgi-bin\tutor4.py

#!/usr/bin/python """

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

URL http://server-name/cgi-bin/tutor4.py

import cgi, sys

sys.stderr = sys.stdout # для вывода сообщений

# об ошибках в броузере

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

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

#   class dummy:

#   def __init__(self, s): self.value = s

#   form = {‘user’: dummy(‘bob’), ‘age’:dummy(’10’)}

html = """

<TITLE>tutor4.py</TITLE>

<H1>Greetings</H1>

<HR>

<H4>%s</H4>

<H4>%s</H4>

<H4>%s</H4>

<HR>"""

if not ‘user’ in form:

line1 = ‘Who are you?’

else:

line1 = ‘Hello, %s.’ % form[‘user’].value

line2 = "You’re talking to a %s server." % sys.platform

line3 = ""

if ‘age’ in form:

try:

line3 = "Your age squared is %d!" % (int(form[‘age’].value) ** 2) except:

line3 = "Sorry, I can’t compute %s ** 2." % form[‘age’].value

print(html % (line1, line2, line3))

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

Рис. 15.11. Страница ответа, сгенерированная сценарием tutor4.py

 

Как обычно, мы можем передавать параметры этому CGI-сценарию в конце URL. На рис. 15.12 изображена страница, полученная при явной передаче имени и возраста пользователя в следующем адресе URL:

http://localhost/cgi-bin/tutor4.py?user=Joe+Blow&age=30

Рис. 15.12. Страница, сгенерированная при обращении к сценарию tutor4.py с параметрами в URL

Обратите внимание, что на этот раз за символом ? следуют два параметра; они отделяются друг от друга символом &. Кроме того, обратите внимание, что в значении параметра user мы определили пробел с помощью символа +. Это обычное соглашение по кодированию адресов URL. На стороне сервера символ + автоматически будет замещен пробелом. Кроме того, это одно из стандартных правил экранирования строк URL, которые мы рассмотрим позднее. И хотя пример 15.10 не содержит ничего особенно нового для сценариев CGI, тем не менее, он высвечивает несколько новых приемов программирования, имеющих отношение к отладке и безопасности сценариев CGI. Давайте кратко рассмотрим их.

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

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

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