Простой Python. Современный стиль программирования (Любанович) - страница 154

(Common Gateway Interface, CGI) был разработан для того, чтобы веб-серверы могли запускать внешние программы и возвращать результаты. CGI также обрабатывал получение входных аргументов от клиента, передавая их через сервер сторонним программам. Однако программы запускались заново при каждом обращении клиента. Масштабировать такие системы было трудно, поскольку даже у небольших программ время загрузки довольно велико.

Для того чтобы избежать задержки запуска, люди начали встраивать интерпретатор языка в веб-сервер. 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, который будет поддерживать сайт. Поэтому сейчас мы немного поговорим о фреймворках, а затем вернемся к альтернативным способам обслуживания сайтов, которые их используют.

Для того чтобы написать сайт с помощью Python, существует множество веб-фреймворков (некоторые даже могут сказать, что их слишком много). Веб-фреймворк обрабатывает как минимум запросы клиента и ответы сервера. Он может предоставлять следующие возможности:

• маршруты — интерпретирует URL и находит соответствующие файлы на сервере или серверный код Python;

• шаблоны — объединяет серверные данные в страницы HTML;

• аутентификация и авторизация — обрабатывает имена пользователей, пароли, разрешения;

• сессии — обслуживает временное хранилище данных во время посещения сайта пользователем.

В следующих разделах мы напишем пример, использующий два фреймворка (Bottle и Flask). Далее поговорим об альтернативах, в частности о сайтах, работающих с базами данных. Вы можете найти подходящий фреймворк Python для любого сайта, который только можете себе представить.