Peter Walerowski Galileo Computing
Inhalt Vorwort des Gutachters 17 Danksagung 19 Einleitung 21 Teil I: Die Zope-Grundlagen 2 Erster Kontakt mit Zope 27 2.1 Was ist Zope? 29 2.2 Der Aufbau von Zope 31 2.3 Die Zielgruppen von Zope 32 2.3.1 Entwickler 32 2.3.2 Mittlere Unternehmen, Verbände, Organisationen 33 2.3.3 Betreiber großer Websites 34 2.4 Die Schwächen von Zope 34 3 Installation 37 3.1 Systemvoraussetzungen 39 3.2 Bezugsquellen 39 3.3 Installation unter Linux 40 3.3.1 Installation der Binärdistribution 40 3.3.2 Installation mit dem Paketmanagement 42 3.4 Installation unter Windows 44 3.5 Das Zope-Verzeichnis 46 3.5.1 Verzeichnisstruktur unter Debian 47 3.6 Den Zope-Server starten 48 3.6.1 Starten unter Linux 48 3.6.2 Starten unter Windows 48 3.7 Startparameter für Zope 49 3.7.1 Zope als Dienst oder Service mit Parametern starten 53 3.8 In Zope einloggen 54 Inhalt 5
4 Arbeiten in Zope 57 4.1 Das Zope Management Interface (ZMI) 59 4.1.1 Der Navigationframe 60 4.1.2 Der Arbeitsbereich 61 4.2 Die wichtigsten Management-Tabs 61 4.2.1 Das View-Tab 62 4.2.2 Das Properties-Tab 62 4.2.3 Das Security-Tab 64 4.2.4 Das Ownership-Tab 65 4.2.5 Das Undo-Tab 66 4.3 Die wichtigsten Zope-Objekttypen 67 4.3.1 Ordner 67 4.3.2 DTAAL-Dokumente 71 4.3.3 DTAAL-Methoden 75 4.3.4 Page-Templates 75 4.3.5 File-Objekte 77 4.3.6 Image-Objekte 78 4.3.7 Skript-Objekte 79 4.3.8 Benutzer-Ordnerund Benutzer-Objekt 82 4.4 Arbeiten mit Objekten 84 4.4.1 Verschiedene Objekte in der Anwendung 84 5 DTAAL - Zopes Markup Language 91 5.1 Die Struktur der DTML 93 5.1.1 Quellen für die Inhalte 94 5.1.2 Die DTAAL-Syntax 95 5.1.3 Namensräume 97 5.2 Das dtml-var-tag 100 5.2.1 Die Attribute des dtml-var-tags 101 5.2.2 Mögliche Werte des fmt-attributs 103 5.3 Das dtml-if-tag 105 5.3.1 Die dtml-else- und dmtl-elif-tags 106 5.4 Das dtml-unless-tag 108 5.5 Das dtml-in-tag 109 5.5.1 Die Attribute des dtml-in-tags 110 5.5.2 Sequenzvariablen mit Bezug auf das aktuelle Element 112 5.5.3 Variablen mit Bezug auf die Gesamtheit der Elementvariablen.. 114 5.5.4 Variablen für die Arbeit mit Teilsequenzen 117 5.6 Das dtml-with-tag 120 5.6.1 Die Attribute des dtml-with-tag 122 5.7 Das dtml-let-tag 122 5.8 Das dtml-call-tag 123 6 Inhalt
5.9 Das dtml-tree-tag 124 5.9.1 Die Attribute des tree-tags 125 5.9.2 Variablen mit Bezug auf die Objekte im Baum 128 5.9.3 Variablen, die den gesamten Baum steuern 129 5.10 Das dtml-raise-tag 130 5.11 Das dtml-try- und das dtml-except-tag 131 5.11.1 Variablen im except-block 132 5.11.2 Ausnahmeunterscheidung mit mehreren except-blöcken 132 5.11.3 Das else-tag innerhalb des try-blocks 133 5.11.4 Das finally-tag im try-block 133 5.12 Das dtml-comment-tag 134 6 TAL - die Alternativlösung 135 6.1 Warum eine Alternative? 137 6.2 Das Konzept von TAL 138 6.3 Die TAL-Anweisungen 139 6.3.1 Die Syntax 139 6.3.2 Die content-anweisung 139 6.3.3 Die replace-anweisung 141 6.3.4 Die attributes-anweisung 141 6.3.5 Die condition-anweisung 142 6.3.6 Die repeat-anweisung 142 6.3.7 Die define-anweisung 144 6.3.8 Die omit-tag-anweisung 147 6.3.9 Die on-error-anweisung 147 6.4 Anweisungen kombinieren 148 6.4.1 Reine TAL-Blöcke verwenden 149 6.5 Die TALES (TAL Expression Syntax) 149 6.5.1 Pfadausdrücke 150 6.5.2 string-ausd rücke 154 6.5.3 Python-Ausdrücke 155 6.5.4 Die not-, nocall- und exists-ausdrücke 156 6.6 Bausteine mit METAL definieren 157 6.6.1 Mit define-macro Bausteine definieren 158 6.6.2 Mit use-macro Bausteine einsetzen 159 6.6.3 Einschübe mit define-slot definieren 160 6.6.4 Einschübe mit fill-slot auffüllen 161 6.6.5 METAL und TAL kombinieren 162 7 Python in Zope verwenden 165 7.1 Die Programmiersprache Python 167 7.2 Python-Grundlagen 168 7.2.1 Variablen und Wertzuweisungen 168 Inhalt 7
7.2.2 Datentypen 169 7.2.3 Kontrollfluß 178 7.2.4 Definition von Funktionen 182 7.2.5 Kommentare 184 7.3 Python in Zope verwenden 184 7.3.1 Python-Skripte 184 7.3.2 Einschränkungen für Python-Skripte 186 7.3.3 Objekte und Eigenschaften referenzieren 187 7.3.4 Formulareingaben verarbeiten 189 7.4 Externe Methoden verwenden 193 Teil II: Zope-Praxis 8 Prototyping eines Projektes 199 8.1 Hintergrund 201 8.1.1 Übergeordnete Anforderungen 201 8.1.2 Zugangs- und Zugriffsebenen 202 8.1.3 Grundanlage des Systems in Zope 203 8.2 Die Startseiten 204 8.2.1 Das Objekt index_html 205 8.2.2 Akquisition 205 8.2.3 Seiten verlinken 206 8.2.4 Flexible Eingangsseite 207 8.2.5 Kopfinformationen als Baustein anlegen 208 8.3 Definition der Seitenbereiche 209 8.3.1 Aufteilung der Seitenbereiche 209 8.3.2 Ein Stylesheet-System einbinden 211 8.4 Entwicklung einer dynamischen Navigation 215 8.4.1 Container für die Inhalte vorbereiten 216 8.4.2 Auslesen der Menüpunkte mit Python-Skript 217 8.4.3 Aufbau der Navigation 220 8.4.4 Das Menü mit Stylesheets gestalten 223 9 Benutzer, Rollen und Rechte 225 9.1 Das Sicherheitskonzept von Zope 227 9.2 Zugriffsrechte steuern 229 9.2.1 Akquisition von Rechten 229 9.2.2 Bereiche für die Öffentlichkeit unzugänglich machen 230 9.2.3 Neue Rollen definieren 232 9.2.4 Neue Benutzer anlegen 233 8 Inhalt
9.3 Benutzertypspezifische Seiten 234 9.3.1 Ein Python-Skript zur Prüfung des Benutzertyps 234 9.3.2 Verzweigen auf die typspezifischen Seiten 235 9.4 Weiterführende Aspekte in Zopes Benutzersystem 238 9.4.1 Lokale Rollen 239 9.4.2 Proxy-Rollen 240 9.4.3 Rechte und ausführbare Objekte 242 9.4.4 Der Notfall-Benutzer 242 10 Lernmodul-Verwaltung aufbauen 245 10.1 Die Arbeitsschritte 247 10.2 Der neue Menüpunkt und die zugehörige Seite 248 10.2.1 Die Verzweigung in die Lernmodul-Verwaltung 248 10.2.2 Die Verzweigung in Unterseiten 251 10.3 Das Objekt Lernmodul definieren und anlegen 253 10.4 Die Übersicht der Lernmodule anlegen 256 10.4.1 Das Page-Template für die Übersicht 257 10.4.2 Das Skript zum Auslesen der Lernmodul-Objekte 262 10.4.3 Neue Stile zur Formatierung der Übersicht 263 10.5 Die Funktionen der Übersichtsseite 264 10.5.1 Das auswertende Skript 264 10.5.2 Handhabung der Fehlermeldungen 267 10.5.3 Bestätigung des Löschvorgangs 268 10.5.4 Server-Antworten handhaben 272 10.5.5 Proxy-Rolle für das ausführende Skript 273 10.6 Neue Module hinzufügen, bestehende ändern 274 10.6.1 Der Aufbau des Formulars 274 10.6.2 Das auswertende Skript 288 10.6.3 Erstellen neuer Objekt-Ids 295 10.6.4 Alternatives Anlegen neuer Lernmodule 297 10.7 Zusammenfassung 298 11 Teilnehmer-Verwaltung aufbauen 301 11.1 Die Arbeitschritte 303 11.2 Das Objekt teilnehmer definieren und anlegen 304 11.3 Teilnehmer hinzufügen, löschen und ändern 307 11.3.1 Der Aufbau des Formulars 308 11.3.2 Das Python-Skript zum Auslesen der belegten Module 313 11.3.3 Das Python-Skript zum Auslesen der wählbaren Module 314 11.3.4 Das auswertende Skript 315 11.3.5 Das Löschen bestätigen 323 Inhalt g
11.4 Anmeldungen stornieren, Lernmodule freigeben 324 11.4.1 Das Formular 324 11.4.2 Das auswertende Skript 325 11.5 Die Mailfunktion integrieren 327 11.5.1 Das Mailhost-Objekt 327 11.5.2 E-Mails versenden 328 11.5.3 Der E-Mail-Versand in der Lernplattform 331 11.6 Die Teilnehmer-Übersicht 333 11.6.1 Das Template 333 11.6.2 Das Skript zum Auslesen der Teilnehmer 335 11.7 Fazit 335 12 Dozenten-Verwaltung aufbauen 337 12.1 Die Arbeitsschritte 339 12.2 Definition und Anlage des Objektes dozent 340 12.3 Das Funktionsmodul Dozenten-Verwaltung 343 12.3.1 Die Übersicht aller Dozenten 343 12.3.2 Die Detail-Ansicht 344 12.3.3 Die Ansicht des zugeteilten Lernmoduls 345 12.3.4 Bestätigung des Löschens 346 12.3.5 Übersicht aller Templates und Skripte 346 12.4 Anpassungen in der Lernmodul-Verwaltung 347 12.4.1 Die Dozenten-Auswahl in der Lernmodul-Verwaltung 347 12.4.2 Die Liste angemeldeter Teilnehmer 351 12.5 Zusammenfassung 353 13 Den Dozenten-Bereich aufbauen 355 13.1 Die Arbeitsschritte 357 13.2 Die Modulnavigation 359 13.3 Der Dozenten-Desktop 362 13.4 Die Lernmodul-Bearbeitung 363 13.4.1 Das Objekt Abschnitt 364 13.4.2 Das auswertende Skript 365 13.5 Erweiterung der Hauptnavigation 369 13.6 Die Abschnitts-Bearbeitung 371 13.6.1 Das Skript zur Erzeugung der Vorschau 375 13.6.2 Das auswertende Skript 377 13.6.3 Die Vorschau 383 13.7 Zusammenfassung 385 10 Inhalt
14 Den Teilnehmer-Bereich anlegen 387 14.1 Die Arbeitsschritte 389 14.2 Der Teilnehmer-Desktop 390 14.3 Die Ansicht der Lerninhalte 392 14.3.1 Die Modulübersicht 392 14.3.2 Die Abschnitts-Ansicht 393 14.4 Zusammenfassung 393 Teil MI: Zope-Vertiefung 15 Die Session-Verwaltung 397 15.1 Die Komponenten der Session-Verwaltung 399 15.1.1 Der Browser Id Manager 400 15.1.2 Der Session Data Manager 401 15.1.3 DerTemporary Folder 402 15.1.4 Der Transient Object Container 403 15.2 Mit Session-Daten arbeiten 404 15.2.1 Auf das Session-Daten-Objekt zugreifen 404 15.2.2 Werte zum Session-Daten-Objekt hinzufügen 405 15.2.3 Werte aus dem Session-Daten-Objekt auslesen 405 15.2.4 Session-Daten manuell annullieren 406 15.2.5 Session-Daten über Seitenaufrufe hinweg verfügbar machen 407 15.2.6 Skripte beim Erstellen oder Löschen eines Session-Daten-Objektes 410 15.3 Ein einfaches Beispiel 410 16 Relationale Datenbanken verwenden 413 16.1 Eine Datenbankverbindung einrichten 417 16.1.1 Das Status-Tab 418 16.1.2 DasTest-Tab 419 16.1.3 Das Browse-Tab 419 16.2 Z SQL-Methoden benutzen 420 16.2.1 Das Objekt SQL-Methode 420 16.2.2 Das Advanced-Tab 421 16.3 Spezielle DTML-Tags für SQL-Methoden 423 16.3.1 Das sqlvar-tag 423 16.3.2 Das sqltest-tag 424 16.3.3 Das sqlgroup-tag 425 Inhalt 11
16.4 Z SQL-Methoden aufrufen 427 16.4.1 Z Search Interface benutzen 428 16.4.2 Z SQL-Methoden aus Page-Templates aufrufen 430 16.4.3 Z SQL-Methoden aus Python-Skripten aufrufen 431 16.4.4 Methoden des Ergebnis-Objektes 432 17 Eine Site-Suchmaschine integrieren 435 17.1 DerZ Catalog 437 17.1.1 Das Find-Objects-Tab 438 17.1.2 Das Content-Tab 439 17.1.3 Das Indexes-Tab 440 17.1.4 Das Metadata-Tab 443 17.1.5 Das Advanced-Tab 443 17.2 Eingabe-und Ausgabe-Interfaces generieren 444 17.3 Volltextsuche mit ZCTextlndex und Lexika 447 17.3.1 ZCTextlndex Lexicon anlegen 447 17.3.2 ZCTextlndex anlegen 448 17.3.3 Möglichkeiten der Volltextsuche 449 17.4 Methoden des Z Catalogs 450 18 Weitere Zope-Funktionen 453 18.1 Access Rule 455 18.1.1 Mehrere Access Rules verwenden 457 18.2 Caching 458 18.2.1 Warum einen Cache benutzen? 458 18.2.2 Einen Cache Manager verwenden 459 18.3 Versionen 462 18.3.1 Arbeiten in einer Version 463 18.3.2 Sichern oder verwerfen einer Version 464 18.4 Fehlermeldungen verwalten 465 18.5 Virtuelles Hosting 467 18.5.1 Das Objekt Virtual Host Monster 468 18.5.2 Apache und Zope gemeinsam nutzen 469 19 Zope-Administration 473 19.1 Das Control Panel 475 19.2 Database Management 476 19.2.1 Das Database-Tab 476 19.2.2 Das Activity-Tab 477 19.2.3 Das Tab Cache Parameters 478 19.2.4 Das Tab Flush Cache 479 12 Inhalt
19.3 Version Management 479 19.4 Product Management 479 19.5 Debug Information 481 19.6 WebDAV Lock Manager 482 20 Zope-Produkte entwickeln 483 20.1 Produkte mit Z Classes entwickeln 486 20.1.1 Ein Produkt anlegen 486 20.1.2 Z Classes hinzufügen 488 20.1.3 Eigenschaften zur Z Class hinzufügen 490 20.1.4 Views zur Z Class hinzufügen 491 20.1.5 Änderung der Return-Ansicht 493 20.1.6 Die Z Class Adresse hinzufügen 496 20.1.7 Eingabeformular für eine Adresse erstellen 499 20.1.8 Eine Anzeige-Ansicht erstellen 501 20.1.9 Weitere Objekte in der Produkt-Entwicklung 503 20.1.10 Das Produkt vertreiben 506 20.2 Produkte mit Python entwickeln 507 20.2.1 Anlegen des Produktordners und der Initialisierungsdatei 508 20.2.2 Die Interfaces des Produktes 509 20.2.3 Das Python-Modul 511 20.2.4 Die Datei init.py 513 21 Neuerungen in Zope 2.7 515 21.1 Neue Objekttypen 517 21.1.1 Ordered Folder 517 21.1.2 ReStructuredText-Dokument 518 21.2 Mehrere Zope-Instanzen 520 21.3 Zope-Konfiguration mit der Datei zope.conf 521 21.4 Mehrere Datenbanken verwenden 523 22 Ausblick auf Zope 3 527 22.1 Das neue Management-Interface 530 22.1.1 Inhalts- und Funktionsbereich 531 22.1.2 Andere Oberflächen für das Management Interface 532 22.2 Die Component Architektur 533 22.2.1 Arten von Komponenten 534 22.2.2 Globale und lokale Komponenten 535 22.3 Konfiguration überzcml 535 22.4 Und einiges mehr 536 22.5 Umsteigen? 537 Inhalt 13
Teil IV: Anhang A API-Referenz 541 A.1 Modul: AccessControl 541 A.1.1 Klasse: SecurityManager 541 A.2 Modul: AuthenticatedUser 542 A.2.1 Klasse: AuthenticatedUser 542 A.3 Modul: DTMLDocument 543 A.3.1 Klasse: DTMLDocument(ObjectManagerltem, PropertyManager) 543 A.4 Modul: DTMLMethod 544 A.4.1 Klasse: DTMLMethod(ObjectManagerltem) 544 A.5 Modul: DateTime 545 A.5.1 Klasse: DateTime 545 A.6 Modul: ExternalMethod 548 A.6.1 Klasse: ExternalMethod 548 A.7 Modul: File[Klasse:] 549 A.7.1 Klasse.File(ObjectManagerltem, PropertyManager) 549 A.8 Modul Folder 550 A.8.1 Klasse: Folder(ObjectManagerltem, ObjectManager, PropertyManager) 550 A.9 Modul: Image 550 A.9.1 Klasse: Image(File) 550 A.10 Modul: MailHost 551 A.10.1 Klasse: MailHost 551 A.11 Modul: ObjectManager 552 A.11.1 Klasse: ObjectManager 552 A.12 Modul: ObjectManagerltem 554 A.12.1 Klasse: ObjectManagerltem 554 A.13 Modul: PropertyManager 556 A.13.1 Klasse: PropertyManager 556 A.14 Modul: PropertySheet 557 A.14.1 Klasse: PropertySheet 557 A.15 Modul: PropertySheets 559 A.15.1 Klasse: PropertySheets 559 A.16 Modul: Request 559 A.16.1 Klasse: Request 559 A.16.2 Methoden 560 A.17 Modul: Response 561 A.17.1 Klasse: Response 561 A.17.2 Methoden 561 14 Inhalt
A.18 Modul: Sessioninterface 563 A.18.1 Klasse: BrowserldManagerlnterface 563 A.18.2 Klasse: SessionDataManagerlnterface 564 A.19 Modul: TransientObject 565 A.19.1 Klasse: TransientObject 565 A.20 Modul: TransientObjectContainer 567 A.20.1 Klasse: TransientObjectContainer 567 A.21 Modul: UserFolder 568 A.21.1 Klasse: UserFolder 568 A.22 Modul: Vocabulary 569 A.22.1 Klasse: Vocabulary 569 A.23 Modul: ZCatalog 570 A.23.1 Klasse: ZCatalog 570 A.24 Modul: ZSQLMethod 571 A.24.1 Klasse: ZSQLMethod 571 B Rechte der Standard-Installation 573 C Zope-Quellen im Internet 577 C.1 deutschsprachig 577 C.2 englischsprachig 577 D Die CD-ROM zum Buch 579 Index 581 Inhalt 15