Для того чтобы избежать задержки запуска, люди начали встраивать интерпре-
татор языка в веб-сервер. Apache запускал код на PHP внутри своего модуля mod_php,
Perl — внутри модуля mod_perl и Python — внутри модуля mod_python. Далее код этих
динамических языков мог быть выполнен внутри долгоиграющего процесса Apache,
а не во внешних программах.
Альтернативный метод заключается в том, чтобы запускать динамический язык
внутри отдельной долгоиграющей программы и заставить ее обмениваться данны-
ми с веб-сервером. Примерами таких программ являются FastCGI и SCGI.
Веб-разработка с использованием Python совершила рывок с появлением Web
Server Gateway Interface (WSGI) — универсального API между веб-приложениями
и веб-серверами. Все веб-фреймворки и веб-серверы Python, показанные далее,
используют WSGI. Обычно вам не нужно знать, как работает WSGI (для этого
многого и не потребуется), но осведомленность об основных принципах его функ-
ционирования может действительно помочь разработке.
Фреймворки
Веб-серверы обрабатывают детали работы HTTP и WSGI, но вам нужно исполь-
зовать веб-фреймворки для того, чтобы написать код Python, который будет под-
держивать сайт. Поэтому сейчас мы немного поговорим о фреймворках, а затем
266
Глава 9. Распутываем Всемирную паутину
вернемся к альтернативным способам обслуживания сайтов, которые их исполь-
зуют.
Для того чтобы написать сайт с помощью Python, существует множество веб-
фреймворков (некоторые даже могут сказать, что их слишком много). Веб-фреймворк
обрабатывает как минимум запросы клиента и ответы сервера. Он может предо-
ставлять следующие возможности:
маршруты — интерпретирует URL и находит соответствующие файлы на сер-
вере или серверный код Python;
шаблоны — объединяет серверные данные в страницы HTML;
аутентификация и авторизация — обрабатывает имена пользователей, пароли,
разрешения;
сессии — обслуживает временное хранилище данных во время посещения сайта
пользователем.
В следующих разделах мы напишем пример, использующий два фреймворка
(Bottle и Flask). Далее поговорим об альтернативах, в частности о сайтах, работа-
ющих с базами данных. Вы можете найти подходящий фреймворк Python для
любого сайта, который только можете себе представить.
Bottle
Bottle состоит из одного файла Python, поэтому его довольно легко опробовать
и развернуть. Bottle не является частью стандартной библиотеки Python, поэтому
установите его с помощью следующей команды:
$ pip install bottle
Рассмотрим код, который запустит тестовый веб-сервер и вернет текстовую
строку, когда ваш браузер обратится по URL http://localhost:9999/. Сохраните этот
файл как bottle1.py:
from bottle import route, run
@route('/')
def home():
return "It isn't fancy, but it's my home page"