К настоящему моменту мы проследили путь, по которому система от- правля ет новую почту. Теперь посмотрим, что происходит при просмотре входящей почты POP.
Если вернуться к главной странице, изображенной на рис. 16.2, можно увидеть ссылку View…, щелчок на которой запускает сценарий на сервере, представленный в примере 16.6:
Пример 16.6. PP4E\Internet\Web\PyMailCgi\cgi-bin\onRootViewLink.py
#!/usr/bin/python
############################################################################ Вызывается щелчком на ссылке View… в главной странице HTML: создает страницу ввода пароля;
этот сценарий можно было бы заменить статической страницей HTML, потому что этот сценарий не имеет никаких входных параметров, но мне требовалось задействовать стандартные функции создания заголовка и нижнего колонтитула и отобразить имя сайта и имя пользователя, которые необходимо получить из настроек; при отправке этой формы пароль передается без имени пользователя, пароль и имя пользователя передаются вместе в виде параметров URL или в скрытых полях формы только после того, как пароль будет зашифрован с помощью модуля шифрования, выгружаемого пользователем;
############################################################################
< шаблон страницы pswdhtml = """
< form method=post action=%sonViewPswdSubmit.py>
<p>
Введите пароль учетной записи пользователя "%s" на сервере POP "%s".
< p><input name=pswd type=password>
<input type=submit value="Submit"></form></p>
< Иг><р><1>Примечание, касающееся безопасности</1>: Пароль, введенный
в поле выше, будет отправлен на сервер через Интернет, но он нигде не отображается, никогда не передается в паре с именем пользователя в незашифрованном виде и нигде не сохраняется: ни на сервере (он только передается последующим страницам в скрытых полях форм), ни на стороне клиента (система не генерирует никаких cookies). Тем не менее, полная безопасность не гарантируется; при работе с PyMailCGI вы можете использовать кнопку "Назад" ("Back") своего броузера в любой момент времени.</р>
< создание страницы ввода пароля
import commonhtml # обычный прием работы с параметрами:
user, pswd, site = commonhtml.getstandardpopfields({}) # сначала из модуля, commonhtml.pageheader(kind=’POP password input‘) # затем из html|url
print(pswdhtml % (commonhtml.urlroot, user, site)) commonhtml.pagefooter()
Этот сценарий почти целиком состоит из разметки HTML: заключенная в тройные кавычки строка pswdhtml выводится с применением операции форматирования строки, с целью вставить значения, за один шаг. Но поскольку нужно получить имя пользователя и сервера, чтобы показать их на странице, использован выполняемый сценарий, а не статический файл HTML. Модуль commonhtml загружает имена пользователя и сервера из входных данных сценария (например, если они добавлены в конец адреса URL сценария) или импортирует их из файла mailconfig — ни в том, ни в другом случае нежелательно жестко прописывать их в сценарии или в его разметке HTML, поэтому файл HTML не подойдет. В мире сценариев CGI программный код на языке Python включает разметку HTML и выполняет подстановку в нее необходимых значений, как показано выше (серверные механизмы шаблонов, такие как PSP, действуют похожим образом, только при их использовании наоборот, разметка HTML включает программный код Python, воспроизводящий необходимые значения).
Поскольку это сценарий, можно воспользоваться функциями создания заголовка и нижнего колонтитула страницы из модуля commonhtml, чтобы страница ответа выглядела стандартным образом, как показано на рис. 16.7.
C rt ☆ http://localhost:8000/cgi-bin/onRootViewLink.py ► В’ Л”
PyMailCGI POP password input
Please enter POP account password below, for user "PP4E@leaniing-python.com" and site "pop.secureserver.net".
… ■! | Submit |
Security note1. The password you enter above will be transmitted over the Internet to the server machine, but is not displayed, is never transmitted in combination with a username unless it is encrypted or obfuscated, and is never stored anywhere: not on the server (it is only passed along as hidden fields in subsequent pages), and not on the client (no cookies are generated). This is still not guaranteed to be totally safe; use your browser’s back button to back out of PyMailCgi at any time.
Back to root page
Рис. 16.7. Страница PyMailCGI ввода пароля для просмотра почты
Предполагается, что на этой странице пользователь должен ввести пароль к учетной записи для указанного имени пользователя и сервера POP. Обратите внимание, что фактический пароль не отображается; поле ввода в разметке HTML определено как type=password, благодаря чему оно действует как обычное текстовое поле, но введенные символы отображаются в виде звездочек. (Смотрите также пример программы pymail в главе 13, как то же сделать в консоли, и пример программы PyMailGUI в главе 14, как то же сделать в графическом интерфейсе на базе tkinter.)
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, II том, 2011