Web 2. Gang Praktische Einführung in die Entwicklung von Webanwendungen mit TurboGears Python User Group Köln 13.12.2006 Christopher Arndt.

Slides:



Advertisements
Ähnliche Präsentationen
eXist Open Source Native XML Database
Advertisements

Bastian Cramer, Universität Paderborn Entwurfsmuster für Webanwendungen Projektgruppe: Generierung von Webanwendungen aus visuellen Spezifikationen.
Ruby on Rails im Überblick
Stefanie Selzer - Pascal Busch - Michael Kropiwoda
Web 3.0 – Programmierung – Semantic Web / CIDOC CRM
SQL als Abfragesprache
Benötigte Applets Startseite: in HTML-Format Applet auf der Startseite Das Applet, das auf der Startseite geladen wird, wird die vier Buttons und die eine.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 6 Model-View-Controler als Grundlage für Nutzerschnittstellen Sommersemester 2003 Lars Bernard.
Datenmodelle, Datenbanksprachen und Datenbankmanagementsysteme
Struts Seminar Javabasierte Webanwendungen. Tobias Kutzler2 Überblick Historie Was ist Struts? Model Controller View Zusammenfassung.
Christian Kästner Modellgetriebene Softwareentwicklung Eclipse Modelling Framework.
Abstrakter Datentyp in C++ I - Klasse -
Projekt Web Engineering
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
DVG Kommentare 1 Kommentare. 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht bis zum Ende der Zeile.
Hänchen & Partner GmbH 1 Web-Anwendungen mit dem Jakarta Struts Framework 3.Juli 2003 Martin Burkhardt.
Uwe Habermann WPF Avalon Formulare aus VFP verwenden Venelina Jordanova
Die Skriptsprache Python im Kontext des Softwareentwicklungsprozesses
Xindice Datenbanken vs. Markup Prof Dr. Manfred Thaller WS 2009 / 2010 Referent: Seyda Kurt.
UML Begleitdokumentation des Projekts
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum Sitzung 6 Sitzung 6: Model-View-Controller als Grundlage.
YouTube5 .0 Projektpräsentation
Coccon das Web-XML-Publishing System Thomas Haller.
Einführung in das Programmieren mit JavaScript Mag. Andreas Starzer weloveIT – EDV Dienstleistungen.
Delphi II - OOP IFB Fortbildung
Wir bauen uns eine Webapplikation!
Medien zwischen Technologie und Gesellschaft Dozent: Herr Prof. Dr. Manfred Thaller SS 13 Referent: Christian Braun.
Metro-Style Apps mit Expression Blend 5 für HTML designen Christian Moser User Experience Designer Zühlke Engineering AG
Einführung / Geschichte Einführung / Geschichte Motivation Motivation Beispiel Beispiel Architektur / Komponenten Architektur / Komponenten Konfiguration.
Projektarbeit PHP 5.3 / MySQL & Content Management Systems
3rd Review, Vienna, 16th of April 1999 SIT-MOON ESPRIT Project Nr Siemens AG Österreich Robotiker Technische Universität Wien Politecnico di Milano.
Proseminar Programmiersprachen Python
A Social Tagging Environment for Web Information Extraction
Version 2008 Team Foundation Version Control (TFVC) … ist eine vollständige Neuentwicklung … wurde für große Teams, die auch weltweit verteilt arbeiten,
Gui-Objekte und Datenmodellobjekte
Entwicklung verteilter Anwendungen II, SS 13 Prof. Dr. Herrad Schmidt SS 13 Kapitel 4 Folie 2 REST Web Services (1)
… und was man damit machen kann.
3. Juni 2003Moritz Petersen Minimales Markup und Templates zur Erstellung von strukturierten Texten Ein Zwischenbericht zur Diplomarbeit.
Torque in Turbine Team 4 Josef Bohninger Thomas Lindenhofer
Webbasierte Verwaltung von Raumbelegungen
TURBINE. Einführung Seit 1999 Java-Framework Integration in Webserver Open Source MVC Muster wird umgesetzt.
11 Zugriffskontrolle (Access Control) Ziele Privilegien Rollen GRANT und REVOKE Befehl Privilegien Rollen GRANT und REVOKE Befehl.
OOSE nach Jacobson Sebastian Pohl/ST7 Betreuer: Prof. Dr. Kahlbrandt.
Datenbanken abfragen mit SQL
IOS Entwicklung von 0 auf 100 Von Philipp Koulen Lehr- und Forschungsgebiet Ingenieurhydrologie.
IT-Dienstleistungen E-Learning Systeme Content Management 1 Fallbeispiel ILIAS: Das Repository-Objekt-Plugin „Centra“
Freelance Cakephp Programmierer. Wir empfehlen das CakePHP System, um eine schnelle Entwicklung von Webanwendungen sicherzustellen. CakePHP ist ein bewährtes.
Cubido business solutions gmbh Haidfeldstrasse 33 A-4060 Leonding di(fh) Wolfgang Straßer ° Rundumblick.
Oracle ADF FacesSeite 1 Oracle ADF Faces OPITZ CONSULTING Oracles Implementierung der JavaServer Faces Spezifikation.
Reorganisation und Administration großer SAP-DB Manfred Riemer SAP AG (z.B. MCOD-Systeme)
LLP DE-COMENIUS-CMP Dieses Projekt wurde mit Unterstützung der Europäischen Kommission finanziert. Die Verantwortung für den Inhalt dieser.
| New Features APEX 4.2.x Patrik Tischer Ratingen,
Grafische Benutzeroberflächen mit Swing (2) Christoph Broschinski, Alexander Sczyrba Jan Krüger
SQL Structured Query Language Enzio Thiem. INHALT CREATE TABLE Anweisung Gängige Datentypen Beispiel CREATE TABLE Beispiel CREATE TABLE - erweitert Beispiel.
CMIP6-DICAD – FU Berlin Thomas Schartner
Einige Ideen für Module
XINFO HORIZONT XINFO-Schnittstellen zum Output-Management
Vorlesung #4 Relationales Kalkül und SQL (Teil 1)
UVCSite und Authentifizierung
XTM - CMS Content Management mit TopicMaps CMS No. 3 bei iVS
XTM - CMS Content Management mit TopicMaps CMS No. 3 bei iVS
Aspect-Oriented Programming: Fad or the Future
Beispiele zur Datenänderung
Create Table, Rechte und Rollen
Programmiermethodik Übung 9
Titel mit Bildlayout Untertitel
Thilo Volprich - Team Technology GmbH
Übersicht und Benutzung von Sphinx
Informatik Softwareentwicklung – 4.3 Entwurfsmuster
 Präsentation transkript:

Web 2. Gang Praktische Einführung in die Entwicklung von Webanwendungen mit TurboGears Python User Group Köln Christopher Arndt

Was ist TurboGears? ● Ein Python Web-Meta-Framework! ● Vergleichbar mit Django und Ruby-on-Rails ● Open Source (MIT Lizenz) ● Relativ jung (1. öffentliche Version Herbst 2005) ● Buzzword-kompatibel: MVC, AJAX(J), REST etc.

Was kann ich mit TurboGears machen? ● „Klassische“ Webanwendungen, z.B. Blogs, Wikis, CM Systeme ● Intranetanwendungen, z.B. WhatWhat Status ● Webadministrations-Werkzeuge, z.B. WebFaction.com Control Panel ● „Microapps“ ( à la Gravatar.com, Websnapr.com, etc.

Welche Bestandteile hat TurboGears? ● Datenbankabstraktion: SQLObject ● Applikations-Server: CherryPy ● Template-Engine: Kid ● Client-side JavaScript: MochiKit ● weitere Komponenten: FormEncode (Validierung), Nose (Unit tests), simplejson (JSON) u.v.m.

Was hat es mit MVC auf sich? ● MVC = Model, View, Controller ● deutsch: Modell, Repräsentation, Steuerung ● Trennung der Komponenten der (Web)Anwendung u.a. zum leichteren Austausch

MVC auf TurboGears-Art ● controllers.py ● model.py ● templates/*.kid

1) Schnellstarte dein Projekt: tg-admin quickstart 2) Code dein Datenmodel: editor model.py 3) Erzeuge die Datenbank: tg-admin sql create 10 Schritte zur TG-Anwendung

10 Schritte zur TG-Anwendung (II) 4) Starte die toolbox und füge einen Benutzer und einige Daten hinzu: tg-admin toolbox 5) Designe deine URLs. 6) Schreibe controller-Klassen für jedes Objekt deines Datenmodells mit Methoden zum Auflisten, Ansehen und Erzeugen/Editieren.

10 Schritte zur TG-Anwendung (III) 7) Schreibe eine index() Methode um die Objekte aufzulisten. ( controller.py, templates/ /list.kid ) 8) Schreibe eine edit() Methode um das Editier-Formular anzuzeigen. ( controller.py, widgets/ form.py, templates/ /edit.kid ) 9) Schreibe () Methoden um Objekte hinzuzufügen, zu löschen und zu ändern. ( controller.py)

10 Schritte zur TG-Anwendung (IV) 10) Schreibe deine Templates. Kleinarbeit: ;-) – CSS – JavaScript – Deployment –...

Beispiel: eine Lesezeichen-Datenbank Lesezeichen-Modell: Titel, URL, Beschreibung, Tags (Schlagwörter) class Bookmark(SQLObject): title = UnicodeCol(length=255, notNull=True) url = UnicodeCol(length=255, notNull=True) description = UnicodeCol() tags = RelatedJoin('Tag', orderBy='name') # meta data created = DateTimeCol(default=datetime.now) owner = ForeignKey('User', notNull=True)

Lesezeichen-Modell (Tags) class Tag(SQLObject): name = UnicodeCol(length=100, notNull=True) bookmarks = RelatedJoin('Bookmark', orderBy='-created') # meta data owner = ForeignKey('User', notNull=True) created = DateTimeCol(default=datetime.now)

URLs ●  Liste der Lesezeichen ● /bookmarks/ /bookmarks/ /view ● /bookmarks/ /edit /bookmarks/ /add ● /bookmarks/ /delete  Löschen des Lesezeichens ● /bookmarks/ /update  Ändern des Lesezeichens Anzeige des Lesezeichens / Anzeige des Edit- Formulars

Controller Methoden (I) Liste der Lesezeichen: class 'bookmarker.templates.bookmarks.list') def index(self): bookmarks = Bookmark.select() return dict(entries=bookmarks) list = index

Templates (I) Liste der Lesezeichen: <a href="${bookmark.url}" py:content="bookmark.title" /> <a href="${tg.url('/bookmarks/%i/edit' % bookmark.id)}">Edit No bookmarks found

Controller Methoden (II) Anzeige eines Lesezeichens (I), def default(self, *params, **kw): if len(params) == 1: id = params[0] redirect(url('%s/view') % id) elif len(params) >= 2: id, verb = params[:2] action = getattr(self, verb, None) if not action or not \ getattr(action,'exposed'): raise cherrypy.NotFound action(item, *params[2:], **kw)

Controller Methoden (III) Anzeige eines Lesezeichens 'bookmarker.templates.bookmarks.edit') def view(self, id, *params, **kw): try: bookmark = Bookmark.get(id) except SQLObjectNotFound: flash('Bookmark not found.') redirect('/') return dict(entry=bookmark)

Templates (II) Anzeige/Editieren eines Lesezeichen: ${entry.description} <input type="text" name="tags" value="${','.join([tag.name for tag in entry.tags])}" />

Controller Methoden (IV) Ändern eines def update(self, id, *params, **kw): try: bookmark = Bookmark.get(id) except SQLObjectNotFound: bookmark = Bookmark( title=kw.get('title'), url=kw.get('url'), description=kw.get('description') ) else: bookmark.title = kw.get('title') bookmark.title = kw.get('url') bookmark.description=kw.get('description') # TODO: handle tags specially redirect('/bookmarks/')

Controller Methoden (V) Löschen eines def delete(self, id, *params, **kw): try: Bookmark.delete(id) except SQLObjectNotFound: flash('Bookmark not found.') else: flash('Bookmark deleted.') redirect('/bookmarks')

Danke fürs Zuhören! (ab )