- předchozí článek - následující článek - obsah - úvodní stránka -

Linuxové noviny 03-04/99

Zope

Miloš Průdek, 11. dubna 1999

Úvod

Každý správce webu, který usiluje o interaktivitu s uživatelem, se jednoho dne musí zamyslet nad přechodem na dynamické generování stránek. Základním nástrojem pro dynamické stránky jsou CGI skripty. Určitá výhoda CGI skriptů je v tom, že můžete použít programovací jazyk, který už umíte (C++, Perl). Jejich hlavní nevýhodou bývá nutnost vyvolat novou instanci pro každý skript. Z toho vyplývá větší spotřeba paměti a systémových prostředků.

Rychlejší a úspornější řešení je použití jazyka, který je přímo vložen do zdrojového HTML textu. Na serveru běží interpret, který čte HTML text, provádí příkazy, které jsou mu určeny, a uživateli je pak servírováno "čisté" HTML, tj. bez příkazů určených pro interpret. Tuto technologii používá například ASP, vytvořené firmou Microsoft. Bohužel, ASP je proprietární řešení, závislé na webovém serveru IIS této firmy. Ve světě Linuxu existuje velmi dobrá alternativa: PHP3. Tento jazyk nabízí prakticky stejné možnosti jako ASP, ale není vázán na platformu MS Windows. PHP3 je populární zvlášť v kombinaci s Open Source databázovými SQL systémy, jako je MySQL a Postgres.

Návrh stránek pomocí PHP3 nebo ASP ale není zrovna snadný, a připomíná všechno, jen ne WYSIWYG. Mezi komerční řešení, které se snaží tento problém řešit automatickým generováním ASP stránek s vizuálním systémem návrhu a programování patří například systémy Sun Microsystems NetDynamics a Allaire ColdFusion. Tyto poměrně silné nástroje jsou bohužel dosti drahé, a navíc se snaží programátora přivázat k proprietární platformě. První a zatím zřejmě jedinou alternativou k těmto systémům je právě Zope.

Historie systému Zope je poměrně zajímavá z licenčního hlediska. Firma Digital Creations vyvíjela tento systém (tehdy ještě pod názvem Principia) jako proprietární a tedy bez zveřejnění zdrojových kódů. V souvislosti s kapitálovou injekcí, kterou nedávno získala, přešla po dohodě s investorem na model Open Source. Zpočátku ale vyžadovala, aby každý website postavený na Zope uváděl ikonku s odkazem na Digital Creations. Na nátlak uživatelů od tohoto požadavku počátkem tohoto ruku upustila, a nyní je Zope oficiálně pod licencí GPL.

Kromě vlastního Zope existuje množství uživatelských nadstaveb, jako jsou databázové adaptéry (tedy rozhranní) pro MySQL, Postgres, Oracle atd., a Digital Creations pokračuje ve vývoji vytvářením dalších aplikačních systémů nad Zope. Tyto systémy (například ZTables pro komunikaci s .dbf soubory a další databázové úkoly) se už prodávají, ale cílem Digital Creations je po určité době převést i tyto doplňky na Open Source - a začít jiné nadstavbové systémy.

Instalace

Instalace je poměrně jednoduchá, a proto jen naznačím, co vás čeká. Nejprve musíte zjistit, zda máte na počítači Python. Pokud ne, nainstalujte jej, nebo si stáhněte distribuci Zope s integrovaným Pythonem. (Jestli si chcete vyzkoušet Zope na Windows ještě před tím, než jej pustíte na váš linuxový server, stáhněte si z http://www.zope.org binární distribuci Zope pro Windows. Tato distribuce obsahuje i Python, a instalace je triviální. Distribuce obsahuje i jednoduchý, ale postačující webserver, takže po spuštění Zope stačí jen nasměrovat váš webserver na příslušný port a adresář na localhost). Jakmile máte Python, můžete nainstalovat Zope, a připravit jej na spolupráci s vaším webserverem. Tady se bude postup lišit podle toho, jaký webserver používáte. Pro Apache stačí nastavit příslušné RewriteRule, přesně jak je popsáno v dokumentaci Zope. Samozřejmě musíte mít v Apachi zakompilovaný modul mod_rewrite (já jsem neměl :-) a pak už stačí poslat signál -HUP procesu httpd, a nasměrovat prohlížeč na http://ip_adresa_serveru/Zope.

Pokud se vám nepodaří instalace napoprvé, bude pes pravděpodobně zakopán v příkazu RewriteRule. Naneštěstí modul mod_rewrite je velice mocný a složitý, takže spíš než metodu pokusů a omylů doporučuji nahlédnout do dokumentace. Ta je díky Bohu perfektní a obsahuje i odkaz na hromadu příkladů. Když budete šikovní, budete mít instalaci hotovou nejpozději za hodinu.

Popis rozhraní

Na rozdíl od komerčních produktů, jako je ColdFusion, nemá Zope klientskou část. Místo toho se veškerá komunikace dělá přes webové rozhranní. Na jedné straně to znamená plnou platformní nezávislost (Zope server je na Linuxu, ale ovládáte jej z Windows nebo jiného OS), na druhé straně to rozhodně není tak rychlé a pohodlné. Už jen proto, že web prostě nepodporuje akce "drag and drop". Komunikace přes web je také o něco pomalejší než přímá manipulace na lokálním stroji, která se používá u komerčních řešení.

[ Zope ]

Základní jednotkou při práci se Zope je Folder (adresář, složka). Existují obyčejné foldery a speciální foldery. Jsou dva druhy speciálních folderů: Control Panel (jeden pro celý systém), a acl_users (může, ale nemusí být v každém folderu). Na obrázku je základní vzhled Zope, včetně speciálních folderů, folderu QuickStart (rychlý úvod do Zope), folderů které jsem vytvořil v rámci pokusů se Zope (Plutonia a Znalosti), standardní hlavičky a patičky, standardní chybové zprávy, a modulu fsimport, který popíšu níže.

Všechny prvky vašeho webu se ukládají do obyčejných folderů, a to jako objekty DTML document, DTML method, Folder, Image, File, Session, Principia Draft, External Method, Mail Host, Z Gadfly Database, Z SQL Method, Z Search Interface. Kromě toho můžete krátké úseky HTML kódu ukládat do Properties. Některé tyto prvky popíšu níže.

Folder

Základní stavební prvek Zope. Připomíná běžný adresář filesystému, ale má podstatně propracovanější systém práv, který si promítnete klepnutím na záložku Security. Folder má 29 práv (linuxový filesystém má tři: read, write, execute). V každém folderu můžete definovat libovolný počet uživatelů, nebo skupin uživatelů (takzvané role), a nastavit nejen co může která skupina uživatelů dělat, ale také která práva jsou zděděna z nadřízeného folderu. Implicitně se práva dědí směrem dolů. Díky těmto možnostem lze z kořenového folderu udělat několik folderů, které odpovídají například divizím firmy, a z nich vytvořit další foldery podle oddělení jednotlivých divizí. Některým oddělením přitom můžete dovolit vytváření vlastních folderů. Jinými slovy můžete delegovat pravomoci (a odpovědnost) na uživatele. Každý uživatel je identifikován jménem a heslem.

Vzhledem k tomu, že k ovládání Zope můžete použít libovolný browser, nic nebrání tomu, aby do vašeho webu přispívali lidé geograficky libovolně vzdálení.

DTML Document

je v podstatě HTML dokument s vloženými DTML příkazy. Což není definice kruhem :-) DTML je jazyk s podobnými možnostmi jako má PHP3, do HTML se vkládá jako poznámka. Můžete provádět běžné operace s proměnnými, vkládat úseky z jiných DTML dokumentů, používat SQL a podobně. Kompletní popis jazyka je nad rámec tohoto úvodního článku (a pravděpodobně i nad rámec jakýchkoliv následujících článků :-), ale jazyk je vcelku dobře zdokumentován přímo na domovských stránkách Zope.

DTML příkazy jsou velice podobné jazyku Python, a v případě potřeby můžete do DTML dokumentů vkládat přímo příkazy Pythonu.

Každý DTML dokument má pět práv, která můžete nastavit, včetně přiřazení k rolím.

Structured Text

Báječný vynález Zope je Structured Text, který umožňuje zapsat běžné formátování HTML uživatelsky přítulným způsobem. Například místo <b> tučný text </b> napíšete prostě *tučný text*. Místo <i> skloněný text </i> stačí jen **skloněný text**. Celkem je k dispozici okolo deseti ekvivalentů různých HTML příkazů. Díky jednoduchému zápisu se vám podaří přesvědčit i sekretářku, aby přispívala do vašeho webu. Stačí když ukážete, o kolik sekund je rychlejší zmáčknout dvě hvězdičky, než například v MS Wordu pracně myší jezdit na ikonu tučného písma. Díky systému práv se nemůže stát, že by uživatel nechtěně porušil celkovou strukturu webu (tedy, pod podmínkou že máte ta práva správně nastavená :-)

Z SQL Method

umožňuje práci s SQL, a to tak důkladně, že si popis nechám na další pokračování.

fsimport

Přepisovat váš statický web by bylo protivné a zdlouhavé. Museli byste do Zope zadat všechny HTML stránky a všechny obrázky. Proto se bude určitě hodit pythonovská externí metoda (čti: doplněk do Zope), která udělá automatický import adresáře do Zope. Utilita se jmenuje fsimport.py, a musíte si ji stáhnout zvlášť z webu Zope a umístit na server do adresáře /Extensions. Pak ji ještě musíte přidat do Zope, jako External Method (napište "fsimport" do všech kolonek). Nejlépe do kořenového adresáře, protože díky dědičnosti bude viditelná i ve folderech nižších úrovní.

Předpokládejme, že váš statický web se nachází ve filesystému na /home/ja/mujweb/, a že máte v Zope vytvořený folder /uzivatele/katka. Dále předpokládáme, že Zope se nachází na http://www.kdesi.cz/Zope. Nasměrujte váš browser na:

http://www.kdesi.cz/Zope/uzivatele/katka/\
       fsimport?fsdir=/home/ja/mujweb/

a Zope se postará o zbytek. To jest, buď provede import a zobrazí stručnou hlášku, nebo na vás vyplivne deset řádků o chybě. Pokud nastane chyba, je problém v tom, že musíte mít práva world searchable po celé cestě až k importovanému webu.

Utilitku fsimport budete asi používat i při dalších úpravách. Určitě bude rychlejší navrhnout nově přidávané stránky v dobrém vizuálním HTML editoru, a pak vtáhnout do stávající struktury.

Undo, Sessions, Upload

Zope si pamatuje vše, co mu uděláte a vše můžete vrátit zpět. Protože je to víceuživatelský systém, pamatuje si i pachatele. Příklad řádku v žurnálu:

/ppm/nabidky/thumb/manage_addImage by prudek\
     on Mar 15 at 22:56:02

Můžete vrátit jednu z akcí, více akcí, a dokonce nespojitou množinu akcí.

Když spustíte Session, můžete dělat úpravy websitu, které se objevují přímo na webu, ale jen vám. Zbytek světa vidí původní verzi. Jakmile jste spokojeni, provedete aplikaci změn do "živého" systému.

Hotové stránky můžete do Zope přidat výše popsanou utilitou fsimport.py, což ovšem vyžaduje přístup k filesystému (třeba i zprostředkovaný přes ftp). Jednotlivé soubory můžete přímo uploadovat přes browser (čili odkudkoliv) klepnutím na záložku Upload. Pozor, nefunguje v MSIE 3.0x, zřejmě kvůli špatné implementaci JavaScriptu. Řečeno reklamním heslem Paegasu: O důvod víc proč nebýt s nimi :-)

WebDAV

je protokol vyvinutý původně Microsoftem. Je to systém pro inteligentní komunikaci mezi tvůrcem obsahu a webovým serverem. Podporuje víceuživatelký přístup, drag and drop, klepnutí na pravé tlačítko pro zobrazení vlastností. Stručně řečeno je o hodně lepší než ftp. Taková řešení sice už existují pro komerční webové servery, ale jsou proprietární. Protože WebDAV je volně použitelný, jedná se o standard, který pravděpodobně převáží. Zajímavé je, že Zope se zřejmě stal prvním funkčním serverem normy WebDAV. Tedy aspoň podle informací na domovské stránce, protože oficiální release ještě není. Zájemci ale mohou stáhnout pracovní verzi z CVS.

Informace o WebDAV najdete v RFC 2518 a na http://www.ics.uci.edu/pub/ietf/webdav/. Dobrý článek o WebDAV a Zope je na http://webserver.cpg.com/wa/4.4/.

Zope zevnitř

Zope je napsáno v jazyku Python. Říká se, že nemusíte být blázen abyste mohl používat počítače, ale rozhodně to není na škodu. Totéž se dá říct o používání Zope a znalosti Pythonu. I když se dá Zope používat, aniž byste uměli Python, v současnosti se vám bude Python hodit v mnoha případech, protože existuje mnoho úkolů, které bez kousku programu v Pythonu prostě neuděláte. Naštěstí je to kvalitní, objektově orientovaný jazyk, který se dá poměrně rychle zvládnout.

Další dokumentace

Zope se vyvíjí natolik rychle, že dokumentace je trochu pozadu za programováním. Dá se nicméně říct, že podstatné věci jsou zdokumentované, a vše je k nalezení na domovské stránce. FAQ teprve vzniká, ale pracovní verze není k zahození; najdete ji na http://zdp.zope.org.

Stávající dokumentace je bohužel trochu podivně formátovaná, a nepřehledná. Nedá se například srovnat s HTML dokumentací k serveru Apache. Přesto je plně použitelná. Dalším perfektním zdrojem informací je emailová konference zope@zope.org, která má v současné době přes třicet zpráv denně.

Autor je zaměstnancem společnosti Sonet Online s.r.o. http://www.sol.cz. *


- předchozí článek - následující článek - obsah - úvodní stránka -