Aplikační server Zope (2)

2. 7. 2002
Doba čtení: 5 minut

Sdílet

Zope je RAD nástroj pro tvorbu webových aplikací. A obsahuje webový i aplikační server. A databázový server. A session management, týmovou spolupráci či verzování. A kešování a poštovní služby. A to jste ještě opravdu neviděli!

Kdyby DTML umožňoval pouze vkládat metody a jiné proměnné do dokumentu, asi bychom toho moc neudělali. DTML nabízí víc. V DTML lze jednoduše používat proměnné. Už ne tak jednoduše je lze vytvářet nebo modifikovat, ale to nám nevadí, protože chceme (znovu opakuji) oddělit logiku od presentace. Například takové zpracování formuláře je typickým úkolem pro DTML. Pokud na předchozí stránce byla například pole jméno, adresa a telefon, může takový DTML objekt zpracovávající data vypadat takto:

<dtml-var standard_html_header>

<dtml-if jmeno>

    <dtml-call expr="pridejZaznam(jmeno, adresa, telefon)">

    <h1>Děkujeme pane/paní <dtml-var jmeno></h1>

    <p>Vaše iniciály byly zařazeny do naší
    databáze. Brzy vás kontaktuje náš
    obchodní zástupce. Těšíme se na spolupráci.</p>

<dtml-else>

    <p>Prosím vyplňte "jméno" na předchozí stránce.</p>

<dtml-endif>

<dtml-var standard_html_footer>

DTML tedy poskytuje jednoduché prvky pro je větvení (dtml-if, dtml-unless), vložení proměnné (dtml-var), jmenné prostředí pro proměnné (dtml-with), zavolání metody nebo pythonovského kódu (dtml-var, dtml-call, pro kód je možno použít atribut expr) a iteraci přes objekty (dtml-in). DTML nabízí i jednoduchou obsluhu výjimek (dtml-raise, dtml-try), posílání elektronické pošty (dtml-sendmail) a také hiearchické zobrazování dat do HTML stromů (dtml-tree), což je poměrně často používaná věc. V příkladu je volána metoda pridejZaznam, která provede vložení do SQL databáze. Protože je však tento úkon častý, byly vyvinuty ZSQL metody.

ZSQL metody jsou velmi podobné DTML metodám. Mají ale několik věcí navíc a především se nepoužívají pro vytváření HTML dokumentu, ale SQL příkazu. V ZSQL metodě můžeme využít všechny DTML příkazy plus ještě několik speciálních pro SQL, které usnadňují char escaping a přechod mezi různými SQL servery. Každá ZSQL metoda musí mít connection, kterou má použít. Před vytvořením ZSQL metody tedy musíte vytvořit objekt Connection. Pokud jste si nainstalovali některé externí připojovací objekty (ZMySql, ZPySql…), můžete je použít. Pokud ne, Zope obsahuje jednoduchý SQL server přímo v sobě. Jmenuje se Gadfly a můžete jej použít pro vývoj. Druhou věcí, kterou musejí ZSQL metody obsahovat, je seznam parametrů, které převezmou z nadřazeného prostředí. Do vlastního těla se napíše přímo příkaz. V našem příkladě by to byly tři parametry: jmeno, adresa a telefon. Tělo metody by mohlo být následující:

INSERT INTO ZAKAZNICI (JMENO, ADRESA, TELEFON) VALUES (
    <dtml-sqlvar JMENO type="nb">,
    <dtml-sqlvar ADRESA type="string">,
    <dtml-sqlvar TELEFON type="string">

)

Potom již stačí v DTML pomocí dtml-call ZSQL metodu zavolat, ta si převezme dané parametry a provede akci. Toto je nesmírně mocný nástroj, neboť lze tak velmi rychle napsat databázovou aplikaci. Na přiloženém obrázku vidíme jednu takovou obsáhlejší ZSQL metodu.

Pokud DTML a ZSQL již na některý úkon nestačí, musíte povolat skript. Skript je opět dokument, na který se dá nahlížet jako na metodu. Má určité parametry a může vrátit výsledek. Jeden takový skript můžete vidět na obrázku. Ve skriptech můžeme používat plnohodnotný Python se všemi jeho výhodami a knihovnami. Můžeme si také instalovat knihovny vlastní.

Téměř každá webová aplikace bude dříve nebo později potřebovat sessions. Session neboli sezení je jakési datové prostředí, v němž se ukládají proměnné v rámci uživatelského sezení. K serveru může být připojeno několik uživatelů a aplikace si musí pamatovat mnoho věcí, například poslední hledané slovo v sekci vyhledávání v nějakém informačním systému. A právě k tomu slouží sessions.

Zope pracuje se sessions naprosto transparentně a v implicitní instalaci je již na sessions připraven. Pokud však chcete sezení upravit k obrazu svému, odkážu vás na nápovědu a dokumentaci. Hledejte tyto tři objekty: Browser ID Manager (vrstva mezi prohlížečem a serverem), Transient Object Container (datové prostředí pro proměnné) a Session Data Manager (místo, kam se proměnné ukládají po ukončení zpracovávání HTTP požadavku).

Pokud tedy máte sezení nastaveno, můžete ihned začít pracovat. Magický objekt má překvapivý název SESSION. Ve skriptech s ním pracujete jako s obyčejným pythonovským slovníkem:

session=context.REQUEST.SESSION

# práce s obyčejnými proměnnými je jasná
count = session['user counter']
session['visited entry page'] = true


# pro uložení seznamů a slovníků se používá tento trik
list = session['shopping cart']
list.append('item 244')
list.append('item 584')
session['shopping cart'] = list

Daleko zajímavější je ovšem použití přímo v DTML (v ZPT to jde samozřejmě také, o tom později):

<dtml-with SESSION mapping>
    <dtml-call IncrementCounter>
    <p>Tuto stránku jste již navštívil(a)
    <dtml-var counter> krát.</p>

</dtml-with>

Zope nabízí kompletní agendu autentifikace a autorizace. Pro nezasvěcené: autentifikace = kdo jsem, autorizace = co mohu provádět. Ze zkušenosti vím, že první kroky v rozsáhlejším webovém projektu vedou právě k přihlašování a odhlašování uživatelů, a využitím vlastností, které Zope nabízí, toho lze dosáhnout velmi snadno. Aplikace je navíc bezpečná, protože Zope je již prověřeným systémem. Zope nabízí kompletní agendu vedení účtů, můžete vytvářet skupiny, zřizovat administrátory skupin, zkrátka naplno využít hotovou věc, kterou byste jinak museli pracně vytvářet. Všechna nastavení si Zope uchovává ve své objektové databázi. Velice snadno se tak dá vytvořit například jednoduchý portál nebo diskusní board.

ict ve školství 24

Příště si něco povíme o ZPT (Zope Page Templates), které nahrazují DTML. Doporučuji však navštívít internetovou stránku serveru Zope. Naleznete tam spoustu zajímavostí včetně databáze produktů, což je obdoba CPAN archivu pro Perl. Produkt je zkrátka soubor, který se po nahrání do adresáře „import“ nainstaluje a je okamžitě připraven k práci. Pokud produkty vyžadují SQL podporu, jsou obvykle nakonfigurovány s Gadfly databází, takže je můžete hned otestovat. Je libo diskusní board, e-obchod, publikační systém? Vše na stránkách naleznete. A kolik že to všechno stojí? Jen váš čas.

Odkazy

Zope.org