Takový handler však nemusíme psát vlastní, součástí mod_pythonu je handler publisher, který navíc přidává mnoho dalších věcí (např. cachování přeložených modulů pro zvýšení rychlosti, opětovné načítání změněného skriptu, pokud je nastaven PythonAutoReload). U tohoto handleru se zadává do adresy nejen cesta k souboru, ale také funkce, která požadavek zpracuje. Například pro adresu /test/path/hello.py/say načte soubor path/hello.py a spustí funkci say. Ta musí přijímat odkaz na proměnnou request a vrátit výsledek.
O handlerech se zmiňuji zejména proto, že umožňují napsat si vlastní způsob zpracování požadavku. Můžete mít handler, který bude například volat metody různých objektů v závislosti na tvaru URL (podobně jako publisher) nebo handler, který bude pouze transformovat XML dokumenty na XHTML a podobně. Možnosti nasazení mod_pythonu jsou vskutku široké.
Pokud byste chtěli mod_apache použít pro vývoj webových aplikací, nabízí veškerý komfort. Poskytuje funkce a třídy pro ukládání sezení, práci s cookies a dokonce nabízí vlastní systém vkládání kódu Pythonu do HTML - PSP. V rámečku uvádím malou ukázku jednoduché MVC architektury pomocí mod_pythonu. Soubor comment.py je v tomto případě kontroller, modelem je zde třída Comment (tuto doménovou třídu pro zkrácení nedefinuji) a Dao (podle návrhového vzoru DAO - Data Access Object). Soubor read.html představuje jednoduchou PSP šablonu, tedy třetí prvek architektury MVC - View.
Část souboru comment.py: def read(req, article): global __mtime__ __mtime__ = 0 dao = Dao() coms = dao.listComments(article) p = psp.PSP(req, filename="templates/test.html") p.run({"comments": coms, "article": article}) return "" Šablona v PSP - read.html: <%@ include file="head.html"%> <% for c in comments: # begin %>
<% # end %>
Metoda read souboru comment.py zpracuje požadavek, na vstupu očekává parametr article (URL tedy musí být například tvaru comment.py/read?article=1). Je vytvořen DAO objekt, metoda vyhledá komentáře a vrací je v kolekci. Tato kolekce je vsazena do jmenného prostoru PSP stránky a PSP stránka je vyrenderována a vrácena klientovi. Metoda run zapisuje do objektu response přímo, není tedy v posledním příkazu co vracet.
Syntaxe PSP je jednoduchá, symboly % představují bloky kódu v Pythonu, symbol %= pak umožňuje provést jeden příkaz a jeho výstup vložit do stránky. Třetí symbol (%@) je určen ke vkládání jiných souborů. Víc toho PSP neumí, ale musím upozornit na jednu zvláštnost - odsazení. Jistě jste si všimli komentářů begin a end, které jsou náležitě odsazeny (jeden tabelátor, případně pevně daný počet mezer v celém souboru). Pokud byste chtěli příkazy Pythonu vnořovat, musíte udržovat správné odsazení, a proto se zde uvádějí (nepovinné) komentáře, aby na ně programátor nezapomněl. Jde to i bez nich.
Stránky PSP jsou nejprve přeloženy na pythonovský objekt (resp. funkci), zkompilovány a uloženy v cache (její velikost se dá nastavit), takže další požadavky jsou již velmi rychlé. Celý mod_python se vyznačuje vysokým výkonem a ve spojení se serverem Apache dosahuje výborných výsledků. Samotný analyzátor PSP stránek je navíc napsán v jazyce C za pomoci flexu, takže překládání při prvním dotazu ani nepostřehnete.