Linux E X P R E S

Facebook

Webové aplikace v Pythonu, 4. část

Tato část bude více praktická, napíšeme si totiž jednoduchou aplikaci typu návštěvní knihy. Na svých stránkách používám blogovací systém NanoBlogger, který je napsaný v Bashi a vytváří statické HTML stránky. Napíšeme si tedy guestbook vhodný jako doplnění do NanoBloggera. Název projektu jsem vhodně zvolil: NanoComment.


Článek představuje několik jednoduchých přístupů, které budou jistě dobře fungovat u malých až středně velkých projektů. Python ale nabízí plně škálovatelná řešení postavená na aplikačních serverech, které zajišťují programátorovi větší komfort a tím zvyšují produktivitu práce.

Django

Rozhraní pro rychlé webové programování Django na mě udělalo takový dojem, že jsem se rozhodl vám jej představit hlouběji. Django je tak trochu podobné Ruby On Rails, avšak projekt je to starší. Už první pohled na webové stránky Djanga vám napoví, že máte co do činění s vyspělým webovým frameworkem (čísla verze 0.91 se vůbec nemusíte bát).

Asi nejznámějším aplikačním serverem pro vývoj webových aplikací je Zope. Zvláštností platformy Zope je především administrační webová aplikace, pomocí které se dají velmi dobře aplikace vytvářet, upravovat jejich nastavení, šablony a dokonce i samotné business objekty (předpokládá se, že pro logickou vrstvu použijete Python, dá se to dělat ale i jinak).

Balíček pro svůj systém zřejmě asi mít v distribuci nebudete, ale nemusíte se bát. Kromě zdrojového balíčku (Django je čistý Python - nemusíte mít ani kompilátor jazyka C) můžete ze stránek stáhnout takzvaný EGG soubor, což je jakási paralela s JAR archívy v Javě. K instalaci "vajíčka" postačí program easy_install, který je pochopitelně napsaný v Pythonu. Instalaci pak provedete právě tímto příkazem (jako root).

Pro experimentování doporučuji nainstalovat SQLite 3.3 a PySqlite. Je možné také tuto databázi využít v ostrém provozu, protože nová verze 3.3 nabízí také konkurenční přístup k souboru s daty (více čtenářů, jeden písař). Ovšem já ji na server pak nasadím na databázi MySQL - budu pak ovšem muset nainstalovat také pythonovský modul MySQLdb (resp. psycopg pro PostgreSQL).

Po provedení instalace byste měli v /usr/bin najít symbolický odkaz na program django-admin.py, kterým budete vytvářet adresářovou strukturu. Pokud byste raději /usr/local/bin, nebo jiný adresář, prostudujte manuálovou stránku easy_installu.

Lepší než psaní kódu je průzkum již existujícího projektu. Proto jsem vytvořil repozitář SVN dostupný přes internet. Přejděte do pracovního adresáře a proveďte svn co http://svn.nanocomment.python-hosting.com/trunk/nc/.

Pokud byste raději chtěli začít úplně nový projekt, můžete si nechat vygenerovat strukturu adresářů a konfiguračních souborů příkazem django-admin.py startproject jméno_projektu. Je to velmi výhodné, určitě si to alespoň zkuste, abyste věděli o klíčových souborech s nastavením.

Nyní přejděte do adresáře, kam jste si stáhli aktuální verzi projektu NanoComment. Otevřete soubor settings.py a zkontrolujte nastavení připojení k databázi. Nejjednodušší to budou mít uživatelé SQLite - aplikace je již nastavena (stačí vlastně vyplnit jen cestu k souboru). Ke všem volbám najdete příslušnou dokumentaci na stránkách Djanga, hodnoty MAIL_COMMENTS_TO a FROM jsou proměnné pro účely aplikaci, můžete je vyplnit, pokud chcete, aby aplikace posílala nové komentáře e-mailem (na adrese localhost:25 musí být relay).

Všimněte si také souboru manage.py, který je ovšem pouhým zprostředkovatelem správcovského modulu a upravovat jej nebudete. Zato spouštět ano; příkazem python manage.py init inicializujete základní struktury v databázi. Django používá pro svoji činnost několik tabulek (správa uživatelů, sezení a podobně) a tento příkaz potřebné tabulky automaticky vytvoří. Pokud skončí příkaz chybou, překontrolujte nastavení databáze (cesta k souboru, adresu serveru či práva uživatele).

Každý Django projekt musí obsahovat jednu nebo více aplikací, proto je nutné takovou aplikaci založit. K tomu můžeme opět vytvořit skriptu manage - spustili bychom příkaz python manage.py startapp comments. Příkaz by vytvořil podadresář nanocomment a v něm nastavení pohledů (views.py), mapování (urls.py) a model dat (models/comments.py). My to však neuděláme - NanoComment má již aplikaci vytvořenou.

Začneme modelem dat. Django obsahuje API pro kompletní mapování tříd v Pythonu do databáze. Pokud tedy chcete, aby byla třída perzistentní, vytvořte potomka třídy Model a nadefinujte metamodel pomocí členských proměnných. Celý model dat je v našem případě jen jedna třída (tabulka) pojmenovaná Comment (viz výpis).

Model datfrom django.core import metaclass Comment(meta.Model):    article = meta.CharField(maxlength=255)    time = meta.DateTimeField()    author = meta.CharField(maxlength=128)    body = meta.CharField(maxlength=4096)    def __repr__(self):        return self.author + ": " + self.body    class META:        admin = meta.Admin()

Všimněte si metody __repr__, která vrací textovou reprezentaci instance a vložené třídy META, která je nutná pro administrátorský panel, o kterém se budeme bavit dále. Aplikace by ale fungovala i bez těchto entit.

Prohlédnout DDL SQL příkazy, které Django umí automaticky generovat, si můžete příkazem python manage.py sql comments. Jejich provedení v aktuální databázi pak realizuje příkaz python manage.py install comments. Ten podle našeho mapování vytvoří potřebné databázové tabulky. Tady je vidět velká výhoda tohoto přístupu, ovšem je nutno podotknout, že ne všechny aplikační modely lze takto vytvářet. Nicméně pro běžné aplikaci je toto mapování zcela postačující, modelovat lze vztahy 1:N i N:M.

Program manage.py je poměrně mocný, jeho spuštěním získáte detailnější popis všeho, co umí. Velmi praktický je příkaz shell, který spustí Python s upravenou cestou sys.path, takže můžete snadno testovat váš model dat, provádět dotazy v databázi a podobně. Více v tutoriálu na stránkách projektu.

Téměř každý projekt potřebuje nějaké administrační webové rozhraní. Ať už je určeno pro uživatele, redaktory portálu nebo jen pro správce systému, vždy je vhodné mít nějaký prostor vyhrazený jen pro určitou skupinu lidí. Django administrační prostředí obsahuje vlastní, je plně modulární a můžete (ale nemusíte) jej ve své aplikaci použít.

V naší ukázce je administrační rozhraní již nakonfigurováno, aktivace se provede odkomentováním několika hodnot v nastavení. Nyní stačí vytvořit superuživatele příkazem python manage.py createsuperuser a nastartovat webový server: python manage.py runserver 8080.

Když nyní přejdete na adresu localhost:8080/admin a přihlásíte se pomocí účtu, který jste vytvořili před chvílí, spatříte velmi pěkné graficky vyvedenou aplikaci, ve které můžete editovat uživatelské účty a skupiny (pro přihlašování do této aplikace). Co je ale nejlepší - spatříte tam také svoji doménovou třídu comments, do které můžete ihned přidávat záznamy, editovat je a vyhledávat v nich. Ovládání je intuitivní, k dispozici jsou různá javascriptová "udělátka" pro pohodlnou editaci (např. dat).

Co a jakým způsobem lze přes administrační panel v objektech editovat, nastavíte pomocí metadat (zmíněné třídy META jednotlivých doménových tříd). Můžete ovlivnit například názvy polí, snadno zavést filtry nebo vyhledávací pole. Django admin také porozumí vztahům mezi tabulkami a automaticky vytvoří combo boxy s číselníky (pokud mají obě třídy metadata a je mezi nimi vztah pomocí cizího klíče). Měnit můžete také celkový vzhled, a to nejen CSS styly, ale změnou HTML šablon. Bližší informace najdete opět v povedeném tutoriálu na webu projektu.

Jak už jsem zmínil, administrační modul není pro vaši aplikaci povinný, ale například u mého projektu NanoComment je výhodný. Nechtělo se mi vytvářet kód pro editaci nebo mazání příspěvků, pokud by ovšem někdo poslal nějaký nevhodný text, můžu záznam přes panel snadno smazat a nemusím se ani hlásit na server a provádět SQL dotazy. Panel je vhodný také pro zadávání testovacích dat.

Pokud s Pythonem teprve začínáte a nemáte přehled v editorech a programovacích prostředích, mohu doporučit program Eric3, který je díky knihovně QT dostupný také na platformě Windows. Eric3 má velmi mnoho vlastností, nechybí doplňování syntaxe, podpora VCS nebo pokročilý debugger. Dále jsem zkoušel dvě komerční prostředí, Wing IDE a Komodo, ale ani jeden mě nenadchl, a tak jsem skončil (nejspíš na doživotí) u svého oblíbeného Vimu.

Diskuze (1) Nahoru