Michael Weigend Rapid Web Development mit Python Web-2.0-Anwendungen mit TurboGears
Michael Weigend: Rapid Web Development mit Python Web-2.0-Anwendungen mit TurboGears ISBN: 978-3-939084-64-8 2007 entwickler.press Ein Imprint der Software & Support Verlag GmbH http://www.entwickler-press.de http://www.software-support.biz Ihr Kontakt zum Verlag und Lektorat: lektorat@entwickler-press.de Bibliografische Information Der Deutschen Bibliothek Die Deutsche Bibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.ddb.de abrufbar. Fachkorrektorat: Hendrik Cyrus Korrektorat: mediaservice, Siegen Satz: mediaservice, Siegen Umschlaggestaltung: Caroline Butz Belichtung, Druck & Bindung: M.P. Media-Print Informationstechnologie GmbH, Paderborn Alle Rechte, auch für Übersetzungen, sind vorbehalten. Reproduktion jeglicher Art (Fotokopie, Nachdruck, Mikrofilm, Erfassung auf elektronischen Datenträgern oder andere Verfahren) nur mit schriftlicher Genehmigung des Verlags. Jegliche Haftung für die Richtigkeit des gesamten Werks kann, trotz sorgfältiger Prüfung durch Autor und Verlag, nicht übernommen werden. Die im Buch genannten Produkte, Warenzeichen und Firmennamen sind in der Regel durch deren Inhaber geschützt.
Einleitung 11 1 Rapid Web Development 13 1.1 Alle reden von Web 2.0 13 1.2 Was ist ein Web-Development-Framework? 13 1.3 Die zentralen Komponenten von TurboGears 14 Python 14 Kid-Templating 15 CherryPy 15 SQLObject 16 Weitere Komponenten 16 1.4 Installation 16 Python Eggs 17 Python Package Index (Python Cheeseshop) 17 EasyInstall 18 Installation mit EasyInstall 19 1.5 Literatur 20 2 Grundlagen der Web-Programmierung mit Python 21 2.1 Was ist ein Protokoll? 21 2.2 URI und URL 22 2.3 Das HTTP-Protokoll 23 Startzeile einer Anfrage (Initial Request Line) 24 Startzeile einer Antwort (Initial Response Line) 24 Header 24 2.4 Serverseitige Web-Programmierung mit Python 25 Ein einfacher HTTP-Server 25 Zugriff auf statische Ressourcen 26 CGI-Skripte 27 CGI-Skripte auf einem lokalen Rechner testen 29 CGI-Skripte auf einem Rechner mit Internetkonnektivität installieren 29 Übergabe von Daten an das CGI-Skript 30 Cookies 34 Beispiel: Besuchszähler 35 CGI-Skripte debuggen 37 2.5 Clientseitige Programmierung 37 Zugriff auf Ressourcen das Modul urllib 37 Rapid Web Development mit Python 5
E-Mails senden mit SMTP 40 2.6 Referenz 43 HTTP 43 CGI 44 smtplib 45 2.7 Literatur 46 3 CherryPy 47 3.1 Idee, Geschichte, Versionen und Installation 47 3.2 Einführendes Beispiel 47 3.3 Der Controller-Baum 51 3.4 Übergabe von Daten 53 Daten aus einem HTML-Formular übergeben 54 Daten in einem Pfad übergeben die Methode default() 56 3.5 Konfiguration 60 Einführendes Beispiel: Wie ändert man den Port des Servers? 60 Aufbau der Konfiguration 61 Entwicklungsmodus und Produktionsmodus 62 3.6 Filter 63 3.7 Statische HTML-Seiten (static_filter) 63 Mehrere Filter für statische Seiten 66 Eine einzige statische HTML-Seite für mehrere URLs (static_filter.file) 67 3.8 Persistenz von Sitzungsdaten 68 Speichern von Sitzungsdaten in Formularen 68 Nutzung des Session-Objekts 71 Konfiguration des Session-Managements 73 Abbruch einer Session 77 3.9 Dateien hochladen 77 3.10 XML-RPC 80 Anfrage 80 Ein CherryPy-Server für XML-RPCs 81 Das Python-Modul xmlrpclib 81 3.11 Zugriff auf die HTTP-Header einer Anfrage (Request) 84 3.12 Zugriff auf die HTTP-Header einer Antwort (Response) 85 3.13 Der Quiz-Server die Minimalversion 87 Das MVC-Pattern (Model View Controller) 89 Der Projektordner 90 Model 90 View 93 Controller 96 3.14 Referenz 101 Konfiguration 101 6
cherrypy.request 103 cherrypy.response 103 Änderungen bei CherryPy 3.0 103 3.15 Literatur 104 4 Object Relational Mapping (ORM) 105 4.1 Grundlagen relationaler Datenbanken 105 Vom ER-Diagramm zum Relationenschema 106 4.2 Eine MySQL-Datenbank erstellen 108 Installation und Start des MySQL-Servers 108 Login 108 User einrichten 109 Tabellen anlegen 111 Datensätze einfügen 112 Anfragen an eine SQL-Datenbank 113 4.3 Anbindung eines Python-Programms an eine MySQL-Datenbank 115 Verändern einer Tabelle 115 Daten abfragen 118 4.4 ORM mit SQLObject 119 Abbildung einer Klasse durch eine Tabelle 120 Objekte erzeugen und verändern 123 Implementierung von 1:n-Beziehungen (one to many) 125 Implementierung von n:m-beziehungen (many to many) 127 Anfragen (Queries) 131 SQLObject-Klassen erweitern 135 SQL-Metadaten 137 4.5 Quiz-Server 138 4.6 Referenz 140 MySQL 140 Verarbeitung von zeitbezogenen Daten mit dem Python-Modul datetime 141 SQLObject 142 4.7 Literatur 145 5 Gestaltung der Präsentation 147 5.1 CSS-Stylesheets 147 Stildeklarationen verwenden 148 Stile für unterschiedliche Ausgabemedien 150 Formate für HTML-Elemente deklarieren 151 Klassen das Attribut class 152 Dekorative Hyperlinks 154 Individualformate das Attribut id 155 Bedingte Formate 157 Schriftgestaltung 158 Absolute und relative Größenangaben 160 Rapid Web Development mit Python 7
Farben 164 Layout: Positionen, Abstände und Rahmen 164 5.2 Templating mit Kid 172 Einführendes Beispiel 172 XHTML 174 Template-Objekte erzeugen und serialisieren 176 Einbettung von Python-Programmblöcken (PIs) 178 Substitution von Ausdrücken 181 Dynamisch erzeugter Text-Inhalt von XML-Elementen (py:replace, py:content) 183 Bedingte Darstellung (py:if, py:strip) 185 Dynamische Attribute 188 Template-Funktionen (py:def) 190 Match-Templates (py:match) 193 Wiederverwendung von Template-Komponenten (py:extends) 196 Layout-Templates (py:layout) 198 Reihenfolge der Verarbeitung von py:-attributen 200 Funktionen 200 Präsentationsalgorithmik und MVC 203 5.3 Eine Präsentation für den Quiz-Server 207 Vorbereitung 207 Statische Elemente die CSS-Datei 208 Gemeinsam verwendete Elemente Match-Templates und Template-Funktionen 210 Templates für die Webseiten 211 Das Präsentationsmodul (view.py) 218 5.4 Referenz 219 CSS 219 Kid 223 5.5 Literatur 224 6 TurboGears 225 6.1 Eine erste Anwendung mit tg-admin quickstart 225 Das Projekt anlegen 226 Die Struktur des Projektordners 227 Den Server starten 228 Die Grundstruktur modifizieren und verstehen 230 6.2 Präsentationsmanagement 232 Das Master-Template 233 Anwendungsbeispiel 236 6.3 Modellmanagement 239 Beispielprojekt: Modellierung von Marathonläufen 239 Vorbereitung des Datenbanksystems 240 Die Konfiguration modifizieren 240 Das Modell definieren 241 8
Tabellen erzeugen und löschen mit tg-admin sql 241 Den Zustand des Modells manipulieren mit tg-admin shell 243 Die Datenbank manipulieren mit CatWalk 243 Das Modell in das Projekt integrieren 245 6.4 Logging 254 6.5 Sprünge in Controller-Methoden redirect() 256 6.6 Validierung und Behandlung von Eingabefehlern 258 6.7 Identitätsmanagement 267 Einführendes Beispiel 268 Das Identitätsmanagement im Controller anwenden 277 Das Identitätsmanagement in Kid-Templates anwenden 278 6.8 Juristische Vorgaben für den Betrieb einer Web-Plattform 279 6.9 Das K-Quiz mit TurboGears 280 Analyse 280 Projekt anlegen und Datenbank vorbereiten 281 Modell 282 Das gemeinsame Stylesheet 285 Allgemeiner Aufbau des Moduls controller.py 288 Startseite und Anwendungsfälle Login und Logout 290 Anwendungsfall Quiz spielen 295 Anwendungsfall Registrieren 300 Anwendungsfall Aufgabe editieren 304 Anwendungsfall Aufgaben entfernen 308 6.10 Das Projekt auf einem Produktionsserver veröffentlichen 312 Konfigurationsdateien 313 Die Projekte hochladen 313 Die Datenbank auf dem Produktionsserver vorbereiten 314 Den Server starten 314 Ein Python-Egg für das Projekt erzeugen 315 Das Python-Egg des Projekts auf dem Produktionsserver installieren 315 6.11 Referenz 316 tg-admin 316 Funktionen 316 Validatoren 317 6.12 Literatur 318 Stichwortverzeichnis 319 Rapid Web Development mit Python 9