Дополнительно в книге исследуется пригодность языка Python на роль инструмента разработки программного обеспечения, в отличие от просто инструмента "создания сценариев". Многие примеры, представленные в книге, подобраны в соответствии с этой целью - среди них вы найдете примеры постепенной разработки клиентов электронной почты, опирающиеся на тысячи строк программного кода. Создание подобных крупномасштабных приложений всегда будет непростым делом, но мы покажем, насколько быстрее и проще создаются такие приложения, когда они разрабатываются на языке Python.
В четвертое издание включено описание новых особенностей языка, библиотек и практических приемов программирования для Python 3.X. В частности, примеры, представленные в книге, выполняются под управлением интерпретатора версии Python 3.1 - наиболее свежей версии Python на момент написания этих строк. Непосредственно перед публикацией книги все основные примеры были опробованы под третьей альфаверсией Python 3.2, но, вообще говоря, они должны сохранить свою работоспособность при использовании любой версии Python из линейки 3.X.
В части IV "Создание сценариев для Интернета" рассматриваются роль Python как языка программирования приложений для Интернета и инструменты в его библиотеке для поддержки этой роли. Попутно привлекаются к использованию инструменты конструирования графических интерфейсов, представленные в 1-м томе книги. Поскольку это популярная область применения Python, главы данной части охватывают все направления.
В главе 12 обсуждаются основные понятия, связанные с Интернетом, рассматриваются низкоуровневые сетевые инструменты Python, такие как сокеты, а также основы программирования архитектуры клиент-сервер.
В главе 13 показано, как сценарии могут использовать инструменты языка Python для доступа к стандартным сетевым протоколам клиента, таким как FTP, HTTP, протоколы электронной почты и другие.
Глава 14 демонстрирует использование клиентских инструментов электронной почты, описанных в главе 13, а также приемы конструирования графических интерфейсов из части III книги (том 1) для реализации полнофункционального клиента электронной почты.
Глава 15 освещает основы создания CGI-сценариев на языке Python, выполняемых на стороне сервера, - программ, используемых для реализации интерактивных веб-сайтов.
Глава 16 демонстрирует приемы реализации веб-сайтов с помощью Python на примере реализации веб-интерфейса для доступа к электронной почте, отчасти в противовес и для сравнения с обычным решением, представленным в главе 14.
Кроме того, в главе 12 дается краткий обзор дополнительных инструментов Python для создания интернет-приложений, таких как Jython, Django, App Engine, Zope, PSP, pyjamas и HTMLgen, более полное описание которых вы найдете в соответствующих ресурсах.
В части IV используются общие концепции программирования, такие как объектно-ориентированное программирование (ООП), рефакторинг программного кода и повторное его использование. Вы увидите, что Python, графические интерфейсы и сетевые инструменты составляют мощную комбинацию.
В части V "Инструменты и приемы" собраны дополнительные темы, касающиеся разработки приложений на языке Python. Большинство представленных здесь инструментов может быть использовано в самых разных областях прикладного программирования.
Глава 17 освещает часто используемые и развитые технологии Python хранения информации между запусками программы - файлы DBM, сериализация объектов, хранилища объектов и интерфейсы Python к базам данных SQL - и кратко знакомит с полноценными объектно-ориентированными базами данных (OODB), такими как ZODB, а также с механизмами объектно-реляционного отображения (ORM), такими как SQLObject и SQLAlchemy. В примерах работы с базами данных SQL используется поддержка SQLite, входящая в состав стандартной библиотеки Python, но сам прикладной интерфейс с легкостью можно перенести на использование более крупных систем, таких как MySQL.
В главе 18 рассматриваются приемы реализации более сложных структур данных на языке Python - стеков, множеств, двоичных деревьев поиска, графов и других. В Python они принимают форму реализаций объектов.
В главе 19 изучаются инструменты и приемы, используемые в языке Python для синтаксического анализа текстовой информации - разбиение и объединение строк, поиск с применением регулярных выражений, анализ документов XML, анализ методом рекурсивного спуска и более сложные темы, связанные с языками.
В главе 20 представлены приемы интеграции - расширение Python с помощью компилируемых библиотек и встраивание программного кода на языке Python в другие приложения. Несмотря на то, что основное внимание уделяется связыванию Python с откомпилированным программным кодом на языке C, тем не менее мы также коснемся вопросов интеграции с Java, .NET и другими языками. В этой главе предполагается, что вы умеете читать программы на языке C, и она предназначена, главным образом, для разработчиков, занимающихся реализацией прикладных уровней интеграции.
Это последняя часть книги, посвященная чистому языку Python. Она интенсивно использует инструменты, представленные ранее в книге, делая особый упор на повторное использование программного кода. Например, калькулятор с графическим интерфейсом (PyCalc) служит демонстрации понятий обработки языков и повторного использования программного кода.
Подобно части I книги (том 1), последняя часть VI "Финал" состоит из одной главы 21, в которой подводятся некоторые итоги. В главе обсуждаются роль Python и область его применения. В ней исследуются некоторые более широкие идеи о круге обычного применения Python, а кроме того, кратко представлены его расширенные возможности. Большая часть этой главы представляет философский взгляд на вещи, но помимо этого в ней выделяются некоторые основные причины использования таких инструментов, как Python.
В книге отсутствуют приложения справочного характера. За дополнительными справочными материалами обращайтесь к стандартным руководствам по языку Python, доступным в Интернете, или к коммерческим печатным справочникам, таким как "Python Pocket Reference" издательства O'Reilly, и другим, которые вы сможете отыскать в привычных местах в Интернете.
Дополнительный материал по базовому языку Python можно найти в книге "Изучаем Python". В 4-м издании этой книги исследуются более сложные инструменты языка, такие как свойства, дескрипторы, декораторы и метаклассы, которые мы пропустили здесь, потому что они относятся к категории базовых особенностей. В книге "Изучаем Python" также более подробно, чем здесь, рассматриваются вопросы работы с текстом Юникода, так как это является отличительной особенностью Python 3.
Марк Лутц (Mark Lutz) является ведущим специалистом в области обучения языку программирования Python и автором самых ранних и наиболее популярных публикаций. Он известен в сообществе пользователей Python своими новаторскими идеями.
Марк является автором книг "Learning Python" ("Изучаем Python", 4-е издание, Символ-Плюс, 2010), "Programming Python" ("Программирование на Python", 4-е издание, в 2-х томах, Символ-Плюс, 2011) и "Python Pocket Reference", выпущенных издательством O'Reilly, каждая из которых претерпела уже четыре издания. Лутц использует Python и занимается его популяризацией начиная с 1992 года; книги о Python начал писать в 1995 году; преподаванием этого языка программирования стал заниматься с 1997 года. На начало 2010 года Марк провел 250 курсов, обучил более 3500 студентов, написал книги по языку Python, которые были переведены более чем на десять языков и суммарный тираж которых составил примерно четверть миллиона копий.
Лутц обладает степенями бакалавра и магистра в области информатики, закончил университет штата Висконсин (США). На протяжении последних 25 лет занимался разработкой компиляторов, инструментальных средств программиста, приложений и разнообразных систем в архитектуре клиент-сервер.
Оглавление книги
"Программирование на Python, 4-е издание, II том"
Часть IV. Создание сценариев для Интернета
Глава 12. Сетевые сценарии
"Подключись, зарегистрируйся и исчезни"
Темы, касающиеся разработки сценариев для Интернета
Опробование примеров этой части книги
Другие возможности разработки сценариев для Интернета на языке Python
Трубопровод для Интернета
Слой сокетов
Слой протоколов
Библиотечные модули Python для Интернета
Программирование сокетов
Основы сокетов
Запуск программ, использующих сокеты, на локальном компьютере
Запуск программ, использующих сокеты, на удаленном компьютере
Параллельный запуск нескольких клиентов
Подключение к зарезервированным портам
Обслуживание нескольких клиентов
Ветвление серверов
Многопоточные серверы
Классы серверов в стандартной библиотеке
Мультиплексирование серверов с помощью select Подводя итоги: выбор конструкции сервера
Придание сокетам внешнего вида файлов и потоков вводавывода
Вспомогательный модуль перенаправления потоков вводавывода
Простой файловый сервер на Python
Запуск сервера файлов и клиентов
Добавляем графический интерфейс пользователя
Глава 13. Сценарии на стороне клиента
"Свяжись со мной!"
FTP: передача файлов по сети
Передача файлов с помощью ftplib
Использование пакета urllib для загрузки файлов
Утилиты FTP get и put
Добавляем пользовательский интерфейс
Передача каталогов с помощью ftplib
Загрузка каталогов сайта
Выгрузка каталогов сайтов
Реорганизация сценариев выгрузки и загрузки для многократного использования
Передача деревьев каталогов с помощью ftplib
Выгрузка локального дерева каталогов
Удаление деревьев каталогов на сервере
Загрузка деревьев каталогов с сервера
Обработка электронной почты
Поддержка Юникода в Python 3.X и инструменты электронной почты
POP: чтение электронной почты
Модуль настройки электронной почты
Сценарий чтения почты с сервера POP
Извлечение сообщений
Чтение почты из интерактивной оболочки
SMTP: отправка электронной почты
Сценарий отправки электронной почты по SMTP
Отправка сообщений
Отправка почты из интерактивной оболочки
Пакет email: анализ и составление электронных писем
Объекты Message
Базовые интерфейсы пакета email в действии
Юникод, интернационализация и пакет email в Python 3.1
Почтовый клиент командной строки
Работа с клиентом командной строки pymail
Вспомогательный пакет mailtools
Файл инициализации
Класс MailTool
Класс MailSender
Класс MailFetcher
Класс MailParser
Сценарий самотестирования
Обновление клиента командной строки pymail
NNTP: доступ к телеконференциям
HTTP: доступ к вебсайтам
Еще раз о пакете urllib
Другие интерфейсы urllib
Прочие возможности создания клиентских сценариев
Глава 14. Почтовый клиент PyMailGUI
"Пользуйся исходными текстами, Люк!"
Модули с исходными текстами и их объем
Зачем нужен PyMailGUI?
Запуск PyMailGUI
Стратегия представления
Основные изменения в PyMailGUI
Новое в версиях 2.1 и 2.0 (третье издание)
Новое в версии 3.0 (четвертое издание)
Демонстрация PyMailGUI
Запуск
Загрузка почты
Многопоточная модель выполнения
Интерфейс загрузки с сервера
Обработка без подключения к Интернету, сохранение и открытие
Отправка почты и вложений
Просмотр электронных писем и вложений
Ответ на сообщения, пересылка и особенности адресации
Удаление сообщений
Номера POP-сообщений и синхронизация
Обработка содержимого электронной почты в формате HTML
Поддержка интернационализации содержимого
Альтернативные конфигурации и учетные записи
Многооконный интерфейс и сообщения о состоянии
Реализация PyMailGUI
PyMailGUI: главный модуль
SharedNames: глобальные переменные программы
ListWindows: окна со списками сообщений
ViewWindows: окна просмотра сообщений
messagecache: менеджер кэша сообщений
popuputil: диалоги общего назначения
wraplines: инструменты разбиения строк
html2text: извлечение текста из разметки HTML (прототип, предварительное знакомство)
mailconfig: настройки пользователя
textConfig: настройка окон редактора PyEdit
PyMailGUIHelp: текст справки и ее отображение
altconfigs: настройка нескольких учетных записей
Идеи по усовершенствованию
Глава 15. Сценарии на стороне сервера
"До чего же запутанную паутину мы плетем..."
Что такое серверный CGI-¬сценарий?
Притаившийся сценарий
Создание CGI¬-сценариев на языке Python
Запуск примеров серверных сценариев
Выбор вебсервера
Использование локального вебсервера
Корневая страница с примерами на стороне сервера
Просмотр примеров серверных сценариев и их вывода
Вверх к познанию CGI
Первая вебстраница
Первый CGI-¬сценарий
Добавление картинок и создание таблиц
Добавление взаимодействия с пользователем
Табличная верстка форм
Добавление стандартных инструментов ввода
Изменение размещения элементов формы ввода
Передача параметров в жестко определенных адресах URL
Передача параметров в скрытых полях форм
Сохранение информации о состоянии в сценариях CGI
Параметры запроса в строке URL
Скрытые поля форм
HTTP "Cookies"
Базы данных на стороне сервера
Расширения модели CGI
Комбинирование приемов
Переключатель "Hello World"
Проверка отсутствующих или недопустимых данных
Рефакторинг программного кода с целью облегчения его сопровождения
Шаг 1: совместное использование объектов разными страницами - новая форма ввода
Шаг 2: многократно используемая утилита имитации формы
Шаг 3: объединим все вместе - новый сценарий ответа
Подробнее об экранировании HTML и URL
Соглашения по экранированию адресов URL
Инструменты Python для экранирования HTML и URL
Экранирование разметки HTML
Экранирование адресов URL
Экранирование адресов URL, встроенных в разметку HTML
Передача файлов между клиентами и серверами
Отображение произвольных файлов сервера на стороне клиента
Выгрузка файлов клиента на сервер
Как же всетаки протолкнуть биты через Сеть
Глава 16. Сервер PyMailCGI
"Список дел на поездку в Чикаго"
Веб¬-сайт PyMailCGI
Обзор реализации
Новое в версии для четвертого издания (версия 3.0)
Новое в версии для предыдущего издания (версия 2.0)
Обзорное представление программы
Опробование примеров из этой главы
Корневая страница
Настройка PyMailCGI
Отправка почты по SMTP
Страница составления сообщений
Сценарий отправки почты
Страницы с сообщениями об ошибках
Единство внешнего вида
Использование сценария отправки почты без броузера
Чтение электронной почты по протоколу POP
Страница ввода пароля POP
Страница выбора почты из списка
Передача информации о состоянии в параметрах URL-ссылки
Протоколы защиты данных
Страница просмотра сообщений
Передача информации о состоянии в скрытых полях форм HTML
Экранирование текста сообщения и паролей в HTML
Обработка загруженной почты
Ответ и пересылка
Удаление
Операция удаления и номера POP-сообщений
Вспомогательные модули
Внешние компоненты и настройки
Интерфейс к протоколу POP
Шифрование паролей
Общий вспомогательный модуль
Преимущества и недостатки сценариев CGI
PyMailGUI и PyMailCGI
Веб¬-приложения и настольные приложения
Другие подходы
Часть V. Инструменты и приемы
Глава 17. Базы данных и постоянное хранение
"Дайте мне приказ стоять до конца, но сохранить данные"
Возможности постоянного хранения данных в Python
Файлы DBM
Работа с файлами DBM
Особенности DBM: файлы, переносимость и необходимость закрытия
Сериализованные объекты
Применение сериализации объектов
Сериализация в действии
Особенности сериализации: протоколы, двоичные режимы и модуль _pickle
Файлы shelve
Использование хранилищ
Сохранение объектов встроенных типов в хранилищах
Сохранение экземпляров классов в хранилищах
Изменение классов хранимых объектов
Ограничения модуля shelve
Ограничения класса Pickler
Другие ограничения хранилищ модуля shelve
Объектноориентированная база данных ZODB
Сильно сокращенный учебник по ZODB
Интерфейсы баз данных SQL
Обзор интерфейса SQL
Учебник по API базы данных SQL на примере SQLite
Создание словарей записей
Объединяем все вместе
Загрузка таблиц базы данных из файлов
Вспомогательные сценарии SQL
Ресурсы SQL
ORM: механизмы объектно¬-реляционного отображения
PyForm: просмотр хранимых объектов (внешний пример)
Глава 18. Структуры данных
"Розы - красные, фиалки - голубые; списки изменяемы, а также и класс Foo" Реализация стеков
Встроенные возможности
Модуль stack
Класс Stack
Индивидуальная настройка: мониторинг производительности
Оптимизация: стеки в виде деревьев кортежей
Оптимизация: непосредственная модификация списка в памяти
Хронометраж усовершенствований
Реализация множеств
Встроенные возможности
Функции множеств
Классы множеств
Оптимизация: перевод множеств на использование словарей
Алгебра отношений для множеств (внешний пример)
Создание подклассов встроенных типов
Двоичные деревья поиска
Встроенные возможности
Реализация двоичных деревьев
Деревья с ключами и значениями
Поиск на графах
Реализация поиска на графе
Перевод графов на классы
Перестановки последовательностей
Обращение и сортировка последовательностей
Реализация обращения
Реализация сортировки
Структуры данных в сравнении со встроенными типами: заключение
PyTree: универсальное средство просмотра деревьев объектов
Глава 19. Текст и язык
"Пилите, Шура, пилите!"
Стратегии обработки текста в Python
Строковые методы
Обработка шаблонов с помощью операций замены и форматирования
Анализ текста с помощью методов split и join
Суммирование по колонкам в файле
Синтаксический анализ строк правил и обратное преобразование
Поиск по шаблонам регулярных выражений
Модуль re
Первые примеры
Строковые операции и шаблоны
Использование модуля re
Дополнительные примеры шаблонов
Поиск совпадений с шаблонами в файлах заголовков C
Синтаксический анализ XML и HTML
Анализ XML
Анализ HTML
Дополнительные инструменты синтаксического анализа
Парсеры, написанные вручную
Грамматика выражений
Реализация парсера
Добавление интерпретатора дерева синтаксического анализа
Структура дерева синтаксического анализа
Исследование деревьев синтаксического анализа с помощью PyTree
Парсеры и возможности Python
PyCalc: программа/объект калькулятора
Графический интерфейс простого калькулятора
PyCalc - графический интерфейс "настоящего" калькулятора
Глава 20. Интеграция Python/C
"Я заблудился в C"
Расширение и встраивание
Расширения на C: обзор
Простой модуль расширения на C
Генератор интегрирующего программного кода SWIG
Простой пример SWIG
Создание оберток для функций окружения C
Добавление классовоберток в простые библиотеки
Обертывание функций окружения C с помощью SWIG
Обертывание классов C++ с помощью SWIG
Простое расширение с классом C++
Обертывание классов C++ с помощью SWIG
Использование класса C++ в Python
Другие инструменты создания расширений
Встраивание Python в С: обзор
Обзор API встраивания в C
Что представляет собой встроенный код?
Основные приемы встраивания
Выполнение простых строк программного кода
Выполнение строк программного кода с использованием результатов и пространств имен
Вызов объектов Python
Выполнение строк в словарях
Предварительная компиляция строк в байт¬код
Регистрация объектов для обработки обратных вызовов
Реализация регистрации
Использование классов Python в программах C
Другие темы интеграции
Часть VI. Финал
Глава 21. Заключение: Python и цикл разработки
"Книга заканчивается, пора уже и о смысле жизни"
"Как-¬то мы неправильно программируем компьютеры"