26 нояб. 2012 г.

Hello world! с помощью mod_python

Написание сайта с использованием mod_python состоит из двух этапов: конфигурирование сервера (apache) и собственно написание кода.

1. Конфигурация сервера:

Вначале установим модуль, если его еще нет:

aptitude install libapache2-mod-python
a2enmod python

Подредактируем, например, на Debian файл /etc/apache2/sites-available/default :


<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www
        <Directory /var/www/>
                Options Indexes MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
                AddHandler mod_python .py        #говорит апачу передавать обработку файлов *.py в mod_python
                PythonHandler index                     #говорит, в каком файле находится обработчик хэндлеров.
                DirectoryIndex index.py                #указывает, какой файл отображается по-умолчанию в директории
        </Directory>
        ErrorLog ${APACHE_LOG_DIR}/error.log
        LogLevel warn
        AddHandler mod_python .py
        PythonHandler mod_python.publisher
        PythonDebug On                                  #включает выведение ошибок в браузер - удобно пр иотладке
        DirectoryIndex index.py
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Активируем виртуалхост (если он не активен) и перезапускаем веб-сервер, чтобы изменения встепили в силу:

a2ensite default
service apache2 restart

2. Написание кода:


from mod_python import apache          #импорт класса apache
def handler(req):                      #функция обработки хэндлера
    req.content_type = "text/html"     #задаем тип содержимого веб-страницы
    req.send_http_header()             #посылка дефолтового хэдера html-страницы
    req.write("Hello World!")          #отправляем Hello World! на страницу
    return apache.OK                   #рендеринг страницы с кодом ОК

Называем файл index.py и сохраняем в директорию виртуал-хоста (в нашем примере это /var/www), не забывая сменить хозяина файла на www-data. Перед проверкой нужно удалить дефолтовый файл index.html из директории виртуалхоста и удалить русскоязычные буквы из питоновского файла - иначе будет ругаться.

Вот так выглядит Hello World на mod_python: