127.0.0.1 — [20/Feb/2013 22:03:48] "GET /oreilly.png HTTP/1.1" 200 -

Если у вас в этой папке находятся и другие файлы, их названия должны появиться в списке. Можете щелкнуть на одном из файлов, чтобы загрузить его. Если ваш браузер сконфигурирован так, чтобы отображать формат этого файла, вы увидите результат на экране, в противном случае браузер спросит, хотите ли вы загрузить и сохранить файл.

По умолчанию используется порт 8000, но вы можете указать любой другой:

$ python — m http.server 9999

Вы должны увидеть следующее:

Serving HTTP on 0.0.0.0 port 9999…

Этот сервер, написанный только на Python, лучше всего подходит для быстрых тестов. Мы можете выключить его, остановив его процесс с помощью комбинации клавиш Ctrl+C.

Вы не должны использовать этот простой сервер для загруженного производственного сайта. Традиционные веб-серверы вроде Apache и Nginx гораздо быстрее работают со статическими файлами. Кроме того, этот простой сервер не может работать с динамическим содержимым, на что оказываются способны более продвинутые серверы, принимая дополнительные параметры.

<p>Web Server Gateway Interface</p>

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

<p>Фреймворки</p>

Веб-серверы обрабатывают детали работы HTTP и WSGI, но вам нужно использовать веб-фреймворки для того, чтобы написать код Python, который будет поддерживать сайт. Поэтому сейчас мы немного поговорим о фреймворках, а затем вернемся к альтернативным способам обслуживания сайтов, которые их используют.

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

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

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

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

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

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

<p>Bottle</p>

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"

run(host='localhost', port=9999)

Перейти на страницу:

Все книги серии Бестселлеры O'Reilly

Похожие книги