Чтение онлайн

на главную

Жанры

Язык программирования Python
Шрифт:

Следующий сценарий mprocess.py выведет в браузере страницу со словами Hello, world!:

Листинг

from mod_python import apache

def handler(req):

req.content_type = «text/html»

req.send_http_header

req.write("""<HTML><HEAD><TITLE>Hello, world!</TITLE></HEAD>

<BODY>Hello, world!</BODY></HTML>""")

return apache.OK

Отличия сценария–обработчика от CGI–сценария:

Сценарий–обработчик не запускается при каждом HTTP–запросе: он уже находится в памяти, и из него вызываются необходимые функции–обработчики (в

приведенном примере такая функция всего одна — handler). Каждый процесс–потомок web–сервера может иметь свою копию сценария и интерпретатора Python.

Как следствие п.1 различные HTTP–запросы делят одни и те же глобальные переменные. Например, таким образом можно инициализировать соединение с базой данных и применять его во всех запросах (хотя в некоторых случаях потребуются блокировки, исключающие одновременное использование соединения разными потоками (нитями) управления).

Обработчик задействуется при обращении к любому «файлу» с расширением py, тогда как CGI–сценарий обычно запускается при обращении по конкретному имени.

В сценарии–обработчике нельзя рассчитывать на то, что он увидит модули, расположенные в том же каталоге. Возможно, придется добавить некоторые каталоги в sys.path.

Текущий рабочий каталог (его можно узнать с помощью функции os.getcwd) также не находится в одном каталоге с обработчиком.

#! — строка в первой строке сценария не определяет версию интерпретатора Python. Работает версия, для которой был скомпилирован mod_python.

Все необходимые параметры передаются в обработчик в виде Request–объекта. Возвращаемые значения также передаются через этот объект.

Web–сервер замечает, что сценарий–обработчик изменился, но не заметит изменений в импортируемых в него модулях. Команда touch mprocess.py обновит дату изменения файла сценария.

Отображение os.environ в обработчике может быть обрезанным. Кроме того, вызываемые из сценария–обработчика другие программы его не наследуют, как это происходит при работе с CGI–сценариями. Переменные можно получить другим путем: req.add_common_vars; params = req.subprocess_env.

Так как сценарий–обработчик не является «одноразовым», как CGI–сценарий, из–за ошибок программирования (как самого сценария, так и других компонентов) могут возникать утечки памяти (программа не освобождает ставшую ненужной память). Следует установить значение параметра MaxRequestsPerChild (максимальное число запросов, обрабатываемое одним процессом–потомком) больше нуля.

Другой возможный обработчик — сценарий идентификации:

Листинг

def authenhandler(req):

password = req.get_basic_auth_pw

user = req.connection.user

if user == «user1» and password == «secret»:

return apache.OK

else:

return apache.HTTP_UNAUTHORIZED

Эту функцию следует добавить в модуль mprocess.py, который был рассмотрен ранее. Кроме того, нужно дополнить конфигурацию, назначив обработчик для запросов идентификации (PythonAuthenHandler), а также обычные для Apache директивы AuthType, AuthName, require, определяющие способ авторизации:

Листинг

<Directory "/var/www/html/mywebdir»>

AddHandler python–program .py

PythonHandler mprocess

PythonAuthenHandler mprocess

AuthType Basic

AuthName «My page»

require valid–user

</Directory>

Разумеется, это — всего лишь пример.

В реальности идентификация может быть устроена намного сложнее.

Другие возможные обработчики (по документации к mod_python можно уточнить, в какие моменты обработки запроса они вызываются):

Листинг

PythonPostReadRequestHandler

Обработка полученного запроса сразу после его получения.

Листинг

PythonTransHandler

Позволяет изменить URI запроса (в том числе имя виртуального сервера).

Листинг

PythonHeaderParserHandler

Обработка полей запроса.

Листинг

PythonAccessHandler

Обработка ограничений доступа (например, по IP–адресу).

Листинг

PythonAuthenHandler

Идентификация пользователя.

Листинг

PythonTypeHandler

Определение и/или настройка типа документа, языка и т.д.

Листинг

PythonFixupHandler

Изменение полей непосредственно перед вызовом обработчиков содержимого.

Листинг

PythonHandler

Основной обработчик запроса.

Листинг

PythonInitHandler

PythonPostReadRequestHandler или PythonHeaderParserHandler в зависимости от нахождения в конфигурации web–сервера.

Листинг

PythonLogHandler

Управление записью в логи.

Листинг

PythonCleanupHandler

Обработчик, вызываемый непосредственно перед уничтожением Request–объекта.

Некоторые из этих обработчиков работают только глобально, так как при вызове даже каталог их приложения может быть неизвестен (таков, например, PythonPostReadRequestHandler).

С помощью mod_python можно строить web–сайты с динамическим содержимым и контролировать некоторые аспекты работы web–сервера Apache через Python–сценарии.

Среды разработки

Для создания Web–приложений применяются и более сложные средства, чем web–сервер с расположенными на нем статическими документами и CGI–сценариями. В зависимости от назначения такие программные системы называются серверами web–приложений, системами управления содержимым (CMS, Content Management System), системы web–публикации и средствами для создания WWW–порталов. Причем CMS–система может быть выполнена как web–приложение, а средства для создания порталов могут базироваться на системах web–публикации, для которых CMS–система является подсистемой. Поэтому, выбирая систему для конкретных нужд, стоит уточнить, какие функции она должна выполнять.

Язык Python, хотя и уступает PHP по количеству созданных на нем web–систем, имеет несколько достаточно популярных приложений. Самым ярким примером средства для создания сервера web–приложений является Zope (произносится «зоп») (см. (Z Object Publishing Environment, среда публикации объектов). Zope имеет встроенный web–сервер, но может работать и с другими Web–серверами, например, Apache. На основе Zope можно строить web–порталы, например, с помощью Plone/Zope, но можно разрабатывать и собственные web–приложения. При этом Zope позволяет разделить Форму, Содержание и Логику до такой степени, что Содержанием могут заниматься одни люди (менеджеры по содержимому), Формой — другие (web–дизайнеры), а Логикой — третьи (программисты). В случае с Zope Логику можно задать с помощью языка Python (или, как вариант, Perl), Форма может быть создана в графических или специализированных web–редакторах, а работа с содержимым организована через Web–формы самого Zope.

Поделиться:
Популярные книги

Первый среди равных. Книга X

Бор Жорж
10. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Первый среди равных. Книга X

Вечный. Книга II

Рокотов Алексей
2. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга II

Кодекс Охотника. Книга VI

Винокуров Юрий
6. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.75
рейтинг книги
Кодекс Охотника. Книга VI

Серв-батальон

Ливадный Андрей Львович
10. Экспансия: История Галактики
Фантастика:
космическая фантастика
8.29
рейтинг книги
Серв-батальон

Операция «Горец»

Пардоу Блейн Ли
19. Боевые роботы — BattleTech
Фантастика:
боевая фантастика
7.29
рейтинг книги
Операция «Горец»

Собрание сочинений, том 14

Энгельс Фридрих
14. Собрание сочинений Маркса и Энгельса
Научно-образовательная:
философия
5.00
рейтинг книги
Собрание сочинений, том 14

"Фантастика 2024-48". Компиляция. Книги 1-29

Вишневский Сергей Викторович
Фантастика 2024. Компиляция
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
юмористическая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
Фантастика 2024-48. Компиляция. Книги 1-29

Аватар

Жгулёв Пётр Николаевич
6. Real-Rpg
Фантастика:
боевая фантастика
5.33
рейтинг книги
Аватар

Совершенная crazy

Степнова Ольга Юрьевна
Детективы:
иронические детективы
6.80
рейтинг книги
Совершенная crazy

Локки 2. Потомок бога

Решетов Евгений Валерьевич
2. Локки
Фантастика:
городское фэнтези
аниме
попаданцы
5.00
рейтинг книги
Локки 2. Потомок бога

Виконт де Бражелон, или Десять лет спустя. Том 2

Дюма-отец Александр
3. Три мушкетера
Приключения:
исторические приключения
9.32
рейтинг книги
Виконт де Бражелон, или Десять лет спустя. Том 2

Лондон

Резерфорд Эдвард
The Big Book
Проза:
историческая проза
6.67
рейтинг книги
Лондон

Казаки в Персии 1909-1918

Стрелянов П. Н.
Научно-образовательная:
военная история
5.00
рейтинг книги
Казаки в Персии 1909-1918

Звездный путь (сборник). Том 3

Блиш Джеймс Бенджамин
Звездный путь
Фантастика:
социально-философская фантастика
космическая фантастика
5.00
рейтинг книги
Звездный путь (сборник). Том 3