Zope - Ein Webapplikationsserver Jörg Lehmann Linux User Group Augsburg e.V. Jörg Lehmann, Linux User Group Augsburg (LUGA) e.V. Linux-Infotag 1 Ausgangssituation I statische → dynamische Seitengenerierung: B aktuelle Inhalte B verschiedene Quellen B Interaktion mit dem Client (sessions) ⇒ Applikation auf dem Webserver Jörg Lehmann, Linux User Group Augsburg (LUGA) e.V. Linux-Infotag 2 Ausgangssituation I statische → dynamische Seitengenerierung: B aktuelle Inhalte B verschiedene Quellen B Interaktion mit dem Client (sessions) ⇒ Applikation auf dem Webserver I Trennung von B Inhalt (content): aus Datenbank, von fremden Webseiten B Darstellung (presentation): zentrales Layout, verschiedene Protokolle (HTTP, FTP, WebDAV) B Programmlogik ⇒ Separierung der Entwicklungsaufgaben Jörg Lehmann, Linux User Group Augsburg (LUGA) e.V. Linux-Infotag 2 Lösungsansätze I einfache Methoden der dynamischen Seitengenerierung: – Apache mit server side includes (SSI) – handgestrickte CGI-Skripten (mit Perl) I speziell entwickelte Webskriptsprachen: – PHP – ASP – WML (basierend auf Metahtml) I Applikationsserver – Java basiert: Enhydra (Tomcat), . . . – Python basiert: Webware, Zope – proprietär: Macromedia Cold Fusion, . . . Jörg Lehmann, Linux User Group Augsburg (LUGA) e.V. Linux-Infotag 3 Die Zope-Architektur Jörg Lehmann, Linux User Group Augsburg (LUGA) e.V. Linux-Infotag 4 Zope - ein grober Überblick Zope besteht aus einer ganzen Reihe von Komponenten I Webserver (ZServer) I Objektdatenbank (ZODB) I Skriptsprachen (ZPT, DTML, Python, Perl) I Benutzer- und Rechteverwaltung I Seitenindex (ZCatalog) I Webinterface (Zope Management-Interface) I Schnittstellen zu relationalen Datenbanken I Sessionmanagement I Content Management Framework (CMF) I viele Zope-Produkte Jörg Lehmann, Linux User Group Augsburg (LUGA) e.V. Linux-Infotag 5 Zope - ein grober Überblick Zope besteht aus einer ganzen Reihe von Komponenten I Webserver (ZServer) I Objektdatenbank (ZODB) I Skriptsprachen (ZPT, DTML, Python, Perl) I Benutzer- und Rechteverwaltung I Seitenindex (ZCatalog) I Webinterface (Zope Management-Interface) I Schnittstellen zu relationalen Datenbanken I Sessionmanagement I Content Management Framework (CMF) I viele Zope-Produkte und das Ganze als Open Source Software! Jörg Lehmann, Linux User Group Augsburg (LUGA) e.V. Linux-Infotag 5 Zope Objektdatenbank ZODB I liefert Persistenz von Zope-Objekten I verschiedene Backends: B file storage: Speicherung in Datei var/Data.fs B Berkeley DB storage B Oracle storage I Undo-Fähigkeit I Verwaltung mehrerer Versionen I Verteilung möglich: Zope Enterprise Objects (ZEO) Jörg Lehmann, Linux User Group Augsburg (LUGA) e.V. Linux-Infotag 6 Templatesprachen für Webseiten → ZPT I Bisherige Templatesprachen: B Kommandos als HTML-Kommentar • <!-#command args-> (SSI) B Kommandos als Tag-Varianten • <? command args> (PHP) • <% command args> (ASP) B Definition neuer Tags • <x:include>. . . </x:include> (JSP) • <dtml-var . . . > (DTML) Jörg Lehmann, Linux User Group Augsburg (LUGA) e.V. Linux-Infotag 7 Templatesprachen für Webseiten → ZPT I Bisherige Templatesprachen: B Kommandos als HTML-Kommentar • <!-#command args-> (SSI) B Kommandos als Tag-Varianten • <? command args> (PHP) • <% command args> (ASP) B Definition neuer Tags • <x:include>. . . </x:include> (JSP) • <dtml-var . . . > (DTML) I Probleme: B statische Darstellung der Seiten? B Bearbeiten mit Standardeditoren (Dreamweaver, GoLive, etc.) nur eingeschränkt möglich! Jörg Lehmann, Linux User Group Augsburg (LUGA) e.V. Linux-Infotag 7 Templatesprachen für Webseiten → ZPT I Bisherige Templatesprachen: B Kommandos als HTML-Kommentar • <!-#command args-> (SSI) B Kommandos als Tag-Varianten • <? command args> (PHP) • <% command args> (ASP) B Definition neuer Tags • <x:include>. . . </x:include> (JSP) • <dtml-var . . . > (DTML) I Probleme: B statische Darstellung der Seiten? B Bearbeiten mit Standardeditoren (Dreamweaver, GoLive, etc.) nur eingeschränkt möglich! I ZPT: Beschreibung des dynamischen Verhaltens in Attributen der HTML-Tags (→ TAL = Template Attribute Language) Jörg Lehmann, Linux User Group Augsburg (LUGA) e.V. Linux-Infotag 7 ZPT: ein einfaches Beispiel <html> <head> <title tal:content="here/title"> Seitentitel </title> </head> <base> <h1 tal:content="here/title"> noch mal der Seitentitel... </h1> </base> </html> I immer gültiges Standard-HTML I tal:content bewirkt Ersetzung des Inhalt des Tags I here/title spezifiziert den einzufügenden Inhalt Jörg Lehmann, Linux User Group Augsburg (LUGA) e.V. Linux-Infotag 8 ZPT: etwas komplexer <ul> <li tal:repeat="lug python:’LUGA’, ’LUGAL’"> <a href="dummy" tal:attributes="href string:http://www.${lug}.de/" tal:content="lug">LUG</a> </li> </ul> wird ausgewertet zu <ul> <li><a href="http://www.LUGA.de/">LUGA</a></li> <li><a href="http://www.LUGAL.de/">LUGAL</a></li> </ul> I tal:repeat wiederholt entsprechenden Tag I tal:attributes ersetzt Attribut eines Tags I python: wertet Pythonausdruck aus I string: fügt String mit Variablensubstitution à la Perl ein Jörg Lehmann, Linux User Group Augsburg (LUGA) e.V. Linux-Infotag 9 Python Skripten ## Script (Python) "objectsForStatus" ##parameters=status ## "Gibt alle Objekte mit dem übergebenen Status zurück" results=[] for object in context.objectValues(): if object.getProperty(’status’) == status: results.append(object) return results I zur Implementierung komplexerer Logik I Editieren via Webinterface möglich I nur eingeschränkte Funktionalität (aus Sicherheitsgründen) Jörg Lehmann, Linux User Group Augsburg (LUGA) e.V. Linux-Infotag 10 Zope Managementinterface (ZMI) I erreichbar durch Anhängen von /manage an URL I nur verfügbar bei entsprechender Authentifizerung und Rechten I Funktionalität: B Verwaltung des Zope-Servers B Erzeugung und Veränderung von Zope Objekten: • ZPTs • Python Skripten • DTML-Methoden und -Dokumente • Benutzer und Rechte • Inhaltsobjekte • Versionen Jörg Lehmann, Linux User Group Augsburg (LUGA) e.V. Linux-Infotag 11 Content Management Framework (CMF) I Trennung von B Inhalt (content classes): in Python B Darstellung (Skins): anpaßbar via Webinterface I Metadaten nach dem Dublin Core Standard I integriertes Workflowsystem I Verwaltung von Mitgliedern: B Anmeldung via Web B Speicherung von Mitgliederdaten B eigenes Homeverzeichnis Jörg Lehmann, Linux User Group Augsburg (LUGA) e.V. Linux-Infotag 12 Content Management Framework (CMF) I Trennung von B Inhalt (content classes): in Python B Darstellung (Skins): anpaßbar via Webinterface I Metadaten nach dem Dublin Core Standard I integriertes Workflowsystem I Verwaltung von Mitgliedern: B Anmeldung via Web B Speicherung von Mitgliederdaten B eigenes Homeverzeichnis I Komponentenarchitektur → Prototyp für zukünftiges Zope 3 Jörg Lehmann, Linux User Group Augsburg (LUGA) e.V. Linux-Infotag 12 Schluß... I Mehr Infos zu Zope unter www.zope.org I Dokumentation: Zope Book, kostenlos verfügbar unter http://www.zope.org/Members/michel/ZB Jörg Lehmann, Linux User Group Augsburg (LUGA) e.V. Linux-Infotag 13 Schluß... I Mehr Infos zu Zope unter www.zope.org I Dokumentation: Zope Book, kostenlos verfügbar unter http://www.zope.org/Members/michel/ZB I Zum Erstellen von Präsentationen mit LATEX prosper.sourceforge.net Jörg Lehmann, Linux User Group Augsburg (LUGA) e.V. Linux-Infotag 13 Schluß... I Mehr Infos zu Zope unter www.zope.org I Dokumentation: Zope Book, kostenlos verfügbar unter http://www.zope.org/Members/michel/ZB I Zum Erstellen von Präsentationen mit LATEX prosper.sourceforge.net 1 f (z) = 2πi I f (w) dw w−z und d i~ |ψ(t)i = H(t)|ψ(t)i dt |w−z|=r Jörg Lehmann, Linux User Group Augsburg (LUGA) e.V. Linux-Infotag 13