Итак, господа программисты, если вам вдруг приспичило разрабатывать динамические странички при помощи Python, вам необязательно ставить какие-либо фреймворки. Конечно, многие советуют пользоваться фреймворками, но, когда вам нужно быстро написать код и не заморачиваться с изучением функций и прочих их особенностей, вы можете подключить к старому доброму Апачу mod_python. Делается это так.
Сначала скачиваем модуль. Скачать можно отсюда. О том, как компилировать модуль, можно почитать здесь. Я не буду заострять на этом внимание, тем более что этот процесс достаточно стандартен. Возьмем простой случай на примере Debian/Ubuntu — пакет для Apache 2 можно подтянуть вот так:
$ sudo apt-get install libapache2-mod-python
Теперь нам надо сконфигурировать Apache, для того, чтобы он обрабатывал скрипты Python. Заранее скажу, в результате мы получим обработку скриптов по аналогии со скриптами PHP, обрабатывающимися через mod_php — т.е. положили файлик в нужную нам директорию и обратились к нему из браузера. Для этого в /etc/apache2/sites-available
найдем файл с конфигурацией для нашего сайта. В простейшем случае — по умолчанию — это файл default
. В нем написано что-то типа:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
Находим в нем блок <Directory></Directory>
, содержащий описание той директории, в которой мы хотим запускать наши скрипты, или создаем такой блок если его нет. В моем случае мне захотелось, чтобы скрипты запускались из корневой директории веб-сервера и во всех вложенных в нее директориях. Я нашел блок
<Directory /var/www/>
...
</Directory>
…и добавил в него следующие строки:
AddHandler mod_python .psp
PythonHandler mod_python.psp
PythonDebug On
AddHandler
— директива, при помощи которой мы назначаем нужное нам расширение файла нужному нам обработчику, в данном случае мы назначили типу файла “.psp” (с таким расширением у нас будут сохраняться скрипты python) обработчику mod_python.
PythonHandler
— директива, позволяющая запускать скрипты в разных режимах. Например, значение mod_python.psp
даст нам обработку скриптов такую, какую мы хотим, а mod_python.cgihandler
будет запускать скрипт Python как CGI-приложение. Для второго варианта понадобится настроить Perl.
PythonDebug
— если директива прописана с параметром On
, то вы, при дописывании к URL скрипта символ “_” (подчёркивание), получите исходный код скрипта и много другой информации, которую можно использовать при дебаггинге скрипта. У меня пока данная директива не отрабатывает, буду искать решение проблемы.
Далее нам, необходимо подключить сам модуль. Делаем так:
$ sudo a2enmod
Запустится программка для включения модулей Apache, вам в консоли будет предложен список доступных, еще не подключенных модулей. В нем должен быть модуль с названием python. Пишем программке “python” и всё, теперь нам остаётся перезапустить Apache и протестировать работу скрипта:
$ sudo apache2ctl restart
или
$ sudo /etc/init.d/apache2 restart
Тестируем скрипт:
Замечу, что стандартный синтаксис в psp-обработчике не прокатит, т.е. строки
#!/usr/bin/env python
…быть не должно, в скрипте должны присутствовать соответствующие теги <% %>
(есть и другие, подробнее тут), в скрипте для PSP могут присутствовать HTML-теги в любом месте скрипта и, соответственно, консольные скрипты мы через браузер обработать не сможем. Есть мысль, что скрипты для работы и через Apache и через консоль, надо выполнять как CGI-приложение. Но это я пока не проверял.