03.02.2008 Python na webu 1.díl (mod_python a webserver, konfigurace)

Důvodem k napsání tohoto seriálu článků je hlavně to, že spousta programátorů, kteří chtějí programovat webové aplikace začíná s PHP. Sám osobně proti PHP nic nemám, já sám jsem na webu taky začínal s PHP. Dají se v tom napsat opravdu velké věci a dá se v tom programovat hodně pěkně. Ale myslím si, že to není uplně ta nejlepší cesta. Skriptovací, plně objektově orientovaný Python je vhodný a rychlý nástroj pro vývoj a troufám si říct, že podporuje zdravé programovací návyky. Proto, než se vydáte do světa Javy, C++, či jiného jazyka, zkuste se na chvíli zastavit v mezistanici Python a vyzkoušejte si cestu, kterou se vydaly takové firmy jako např: www.google.com, nebo www.seznam.cz.

Postupně bych se chtěl věnovat základní konfiguraci webserveru, práci s formuláři, práci s databází, se session. Výsledkem by měl být tento blog. Postupně budu používat mod_python, Teng a MySQL.

Předem bych chtěl upozornit, že Python (mod_python) není PHP a filozofií se blíží spíše k Javě (servlet API). Proto je potřeba kolem něj vybudovat určitou infrastrukturu, aby práce byla příjemnější. Já se zde budu snažit popsat to, co mě samému přijde jako rozumný kompromis. Veškeré další informace se budou týkat pouze světa Linuxu. Windows už jsem dávno opustil a některé technologie, které budu používat, nejsou pro windows portované. Sám používam Debian a proto instalace nezbytných součástí budou uvedeny pro tento systém, potažmo pro Ubuntu.

Tento první díl se bude týkat základního nastavení webserveru Apache pro práci s mod_pythonem. Takže hurá do toho a půl je hotovo. Jak do systému dostanete Apache a mod_python je na Vás, pro Debian (Ubuntu) bude stačit:

apt-get install apache2 apache2-mpm-prefork libapache2-mod-python

Nyní máme nainstalováno vše co zatím budeme potřebovat. Jako další krok si vytvoříme základní adresářovou strukturu, ve které si budeme hrát a rozjedeme si vlastní instanci apache na portu třeba 8000, tak abysme mohli začít testovat mod_python.

mkdir -p ~/blog/conf
mkdir -p ~/blog/src
mkdir -p ~/blog/bin
mkdir -p ~/blog/log

do adresáře ~/blog/conf si připravíme konfiguraci pro webserver.
Aby jsme mohli webserver spustit, potřebujeme nějaký, alespoň minimální init skript. Takový velice jednoduchý jsem připravil zde. Doporučuji uložit do adresaře ~/blog/src.
Dále musíme vytvořil symlink na binárku webserveru. A v adresáři ~/blog/src vytvořit testovací soubor který budeme chtít serverem zobrazit.

wget http://media.karotka.cz/13/httpd.conf -O ~/blog/conf/httpd.conf
wget http://media.karotka.cz/13/blog.sh -O ~/blog/src/blog.sh
chmod u+x ~/blog/src/blog.sh
ln -s /usr/sbin/apache2 ~/blog/bin/blog
echo "Ahoj" > ~/blog/src/test.html

Po stažení je potřeba v konfiguráku ~/blog/conf/httpd.conf upravit váš home adresář. /home/uzivatel nahradit vlastním, celkem na třech místech. A pak už můžeme server spustit

~/blog/src/blog.sh start

Teď stačí otevřít prohlížeč a napsat http://localhost:8000/test.html a měli by jste vidět nápis "Ahoj". Pokud je tomu tak, webserver běží a můžeme se začít věnovat mod_pythonu.

V další části upravíme konfiguraci serveru tak, aby zpracoval request mod_python a zobrazil nějaký minimální výstup. V konfiguraci ~/blog/conf/httpd.conf odkomentujeme část týkající se mod_pythonu, vytvoříme první pythoní skript a restartneme server:

# v sekci
<Directory /home/uzivatel/blog/src>
#    SetHandler python-program
#    PythonHandler index
#    PythonDebug On
#    PythonAutoReload On
</Directory>

# odkomentujeme části týkající se mod_pythonu
<Directory /home/uzivatel/blog/src>
    SetHandler python-program
    PythonHandler index
    PythonDebug On
    PythonAutoReload On
</Directory>
# napr. takto v konzoli vytvorime skript
echo "from mod_python import apache" > ~/blog/src/index.py
echo "def handler(req):" >> ~/blog/src/index.py
echo "    req.content_type='text/html'" >> ~/blog/src/index.py
echo "    req.write('Ahoj svete.')" >> ~/blog/src/index.py
echo "    return apache.OK" >> ~/blog/src/index.py

# restartneme server
~/blog/src/blog.sh

Vyzkoušíme prohlížeč, do kterého napíšeme http://localhost:8000/. Měli bychom vidět text "Ahoj svete".
Pokud tomu tak je, gratuluji k prvnímu pythonímu skriptu. V opačném případě vám mod_python vypíše, kde jste udělali chybu.

Kde se text vzal a jak to, že se zobrazil ? Podíváme se detailněji na konfiguraci sekce <Directory /home/uzivatel/blog/src> webserveru.

Zpět k hlavní metodě handler. Té se předá jediný parametr, objekt typu mp_request, který obsahuje spoustu důležitých údajů pro práci s HTTP. Všechny jeho atributy si můžete zkusit vypsat např. tak, že skript ~/blog/src/index.py upravíme takto:

from mod_python import apache

def handler(req):
    req.content_type='text/html'
    for member in dir(req):
        req.write(member)
        req.write('<br>')
    return apache.OK

Takže to je prozatím vše. V další části se budu věnovat tomu, jak zpracovat GET a POST data.

A na konec bych ještě dodal, že tento jednoduchý příklad zvládla i moje neprogramující přítelkyně na svém Kubuntu.

Komentáře (0)

© 2008. Weblog nejen o práci. www.Karotka.cz. Rss    Google Pagerank - www.karotka.czGoogle Pagerank S-Rank - www.karotka.czS-Rank