přejít na obsah přejít na navigaci

Linux E X P R E S, Webové aplikace v Pythonu, 1. část

Webové aplikace v Pythonu, 1. část

Webu vévodí technologie PHP, Java, Perl nebo ASP. Velkou novinkou je také Ruby On Rails. Python však útočí ze zálohy.


Webové programování zažívá explozi, programátoři různých technologií jazykem PHP počínaje a J2EE konče jsou velmi žádaným artiklem na trhu práce a začínající uživatel je přímo zavalen nejrůznějšími frameworky, přístupy, knihovnami, nástroji, paradigmaty a jazyky.

Python je objektově orientovaný dynamicky silně typový jazyk s velmi příznivou křivkou učení, dobrou přenositelností a přehlednou syntaxí. Rychle se ho nejen naučíte, ale hlavně v něm programátor pracuje efektivně – ne nadarmo je Python přezdíván jako „lépe čitelný Perl“. Python je jazyk intepretovaný, zdrojový kód je podobně jako u Javy překládán do mezikódu (bytecode). Programátor může snadno vytvářet moduly v C/C++, takže je snadné některé kritické části aplikací optimalizovat na rychlost.

V následujícím několikadílném článku se chci věnovat webovému programování v Pythonu. A webové programování ve své nejprostší formě – to jsou CGI skripty. Je jednoduché nastavit libovolný webový server na spouštění CGI skriptů. Toto řešení je však značně pomalé, pro každý požadavek se musí totiž znovu spustit interpretr jazyka Python.

Ačkoli existují různá řešení typu FastCGI, které obcházejí opakované spouštění procesů, existuje lepší způsob, který je nejen výkonnější, ale také poskytuje užší spolupráci s webovým serverem. Modul mod_python pro server Apache umožňuje spouštění Pythonu v rámci webového serveru, umí tudíž zpracovávat požadavky rychle, protože opakovaně nespouští interpretr a znovu nepřekládá kód. Navíc přidává několik příjemných nástrojů, které usnadní programování.

Modul mod_python je určen výhradně pro server Apache, jinde zkrátka nefunguje. Může to být nevýhoda, ovšem řešení od Apache Foundation je natolik stabilní a škálovatelné, že se málokdy uchýlíte pro jiné servery, a pokud ano, většinou jen pro některé specifické případy. Naopak, úzká spolupráce je výhodou, protože programátor může ovlivnit prakticky všechny důležité faktory během zpracování požadavku (přímo „zevnitř“ serveru). To umožňuje vytvářet specializované www aplikace (například streamování obsahu). Začneme tedy na té nižší úrovni.

Předpokládám nainstalovaný Apache 2.0 a mod_python 3.1 nebo vyšší. Dejme tomu, že pro určitou část webu (například všechny URL začínající /app/) aktivujete modul pro soubory končící na py direktivou AddHandler mod_python .py. Apache bude (samozřejmě po restartu) všechny požadavky s URL končící na py předávat modulu ke zpracování. Nyní stačí modul nastavit tak, aby nahrál a spouštěl kód v Pythonu, který se postará o zpracování. To mají na starost tzv. handlery – obyčejné moduly v jazyce Python s funkcemi s předem definovanými názvy.

Pro to poslouží volba PythonHandler, kterou do Apache přidává mod_python (musí být instalován a aktivován). Jeho prvním parametrem je balíček v Pythonu (zadáváme celou cestou), volitelně můžeme specifikovat, pro jakou příponu bude handler použit. Je možné nastavit více modulů pro různé handlery (např. pro autorizaci), bližší informace v dokumentaci.

Server Apache zpracovává požadavky v několika vlnách. Nejprve přezkoumá adresu požadavku, volitelně zkoumá identitu uživatele (známé přihlašovací okno prohlížeče) a autorizuje přístup, dále načítá soubor či předává požadavek ke zpracování modulu a nakonec jej (zjednodušeně řečeno) vrátí klientovi. V mod_pythonu můžete ovlivnit jakoukoli z těchto fází. Můžete Apache nastavit tak, aby všechny fáze zpracovával jeden modul, nebo tyto úkoly rozdělit mezi různé moduly.

# konfigurace Apache:
SetHandler mod_python .py
PythonHandler myapp.hellomodule
PythonPath "['/path'] + sys.path"
PythonDebug On
# /path/myapp/hellomodule.py:
from mod_python import apache
def handler(req):
req.content_type = "text/plain"
req.write("Hello World!")
return apache.OK

Nahoru

Přidat téma diskuse

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích a pravidlech najdete v nápovědě.
Diskuzi můžete sledovat pomocí RSS kanálu rss



 
 

Top články z OpenOffice.cz