3. Grundlagen zu Python-Web-Frameworks

Eigenschaften von Python-Web-Frameworks
Framework-Stacks
Verwendung von Python-Web-Frameworks

3.1 Eigenschaften von Python-Web-Frameworks

Wie alle anderen Web-Frameworks auch, bieten alle Python-Web-Frameworks die nötigen Mittel um Web-Anwendungen zu programmieren. Ziel von solchen Frameworks ist es, dass der Benutzer sich nur um die wichtigen Aufgaben eines Projektes kümmern muss und ihm die Nebensächlichkeiten abgenommen werden. Es entfallen beispielsweise die Arbeit mit konkreten Protokollen oder Sockets.

Unterstützt wird der Benutzer durch die vom Framework bereitgestellten Module. Diese können dirket genutzt werden, wie beispielsweise ein Gästebuch, oder lediglich indirekt, wie beispielsweise ein Caching-Modul für Web-Seiten. Weiter werden meist auch weitere Techniken angeboten, wie das Erzeugen von Seiten-Templates, das Einbinden von Skripten oder ein Content-Management-System.

Die Verwendung von Web-Frameworks schränkt den Benutzer in einigen Bereichen jedoch auch ein. Vorgefertige Funktionen können nur in Grenzen an die eigenen Anforderungen angepasst werden und eigenen Produkte müssen der Schnittstelle des Frameworks genügen. Jedoch überwiegen in den meisten Fällen die Vorteile von bereits fertiggestellten Frameworks, da diese es ermöglichen in kurzer Zeit bereits sehr gute Anwendungen zu gestalten.

Die schnelle Entwicklung macht sich bereits bei der Installation der meisten Python-Web-Frameworks bemerkbar. Dies ist meinst mit nur wenigen Klicks vollkommen automatisch durchzuführen. Zumindest die großen Frameworks (Django, Python, TurboGears) sind sofort lauffähig und bieten sofort recht brauchbare und, für das Internet besonders wichtig, sichere Grundeinstellungen. Hinzu kommt, dass im Normfall ein Python-Interpreter automatisch mitgeliefert wird, so dass dieser nicht mehr gesonder installiert werden muss. Es kann aber auch der vorher vorhandene genutzt werden.

Über alle Python-Web-Frameworks läßt sich sagen, dass sie zu einem großen Teil in Python programmiert sind. Jedoch werden geschwindigkeits-kritische Teile oft in C bzw. in C++ ausgelagert.

3.2 Framework-Stacks

Mittlerweile gibt es mehrere hundert verschiedene Python-Web-Frameworks für die verschiedensten Bereiche. Dies liegt vorallem an der Einfachheit von Python, der guten Erweiterbarkeit der großen Web-Frameworks und nicht zuletzt an der Realisierung spezieller (eigener) Anforderungen. Zu den momentan bekanntesten, und auch umfangreichsten, Produkten gehören momentan Django und Zope, welche oft nur eine Grundlage für ander Frameworks liefern, aber auch kleinere wie Plone, CherryPy, TurboGears, Quixote, Albatross und Spyce.

Besonders bei Python-Web-Frameworks kann man gut zwischen full-stack und nicht-full-stack Frameworks unterscheiden. Full-stack Framworks stellen alles bereit, was man fuer eine spezielle Aufgabe benötigt. Im Bereich der Web-Frameworks sind dies beispielsweise Page-Templates, Caching-Mechanismen, Scripting und noch vieles mehr. Die drei größten in Python geschriebenen Web-Frameworks, Django, TurboGears und Zope, sind beispielsweise beide full-stack und dinen daher oft als grundlage für nicht-full-stack Frameworks. Diese liefern nur eine Teilfunktionalität, wie ein Forum-Systen, einen e-Shop oder ein Content-Management-System. Das wohl bekannteste und erfolgreichste Python nicht-full-stack Web-Framwork ist Plone und basiert auf Zope.

Über wie viele Ebenen sich ein Stack aufbauen kann, ist beispielhaft an Abbildung 3.1.1 verdeutlicht:


Abbildung 3.1.1: Framework-Stack
Die Basis bietet das full-stack Web-Framework Zope, welches alle Mittel bereitstellt um Webanwendungen zu erzeugen. Aufbauend auf Zope sind beispielsweise CMF (Content Management Framework) und ERPS, ein offenes ERP-System. CMF erweitert Zope hier um die Funktionalietät eines echten CMS-Systems. Auf CMF aufbauend ist Plone erschienen, dass es ermöglicht per echter grafischer Oberfläche mit dem CMF zu arbeiten. An oberster Stufe steht Icoya, welches einen grafischen Editor (WYSIWYG) für Web-Seiten bereitstellt.

Gerade bei den großen Python-Web-Frameworks ist jedoch zu erkennen, dass die Klassifizierung als full-stack Web-Framework nicht ausreicht. Mittlerweile handelt es sich bei diesen Anwendungen schon um Application Server. Im Normalfall werden jeweils ein eigenen Web-Server (HTTP, FTP, ...), eine Benutzer-Verwaltung und noch viele weitere Dinge die über ein Web-Framework hinaus gehen, angeboten.

3.3 Verwendung von Python-Web-Frameworks

Bei der tatsächlichen Verwendung von Python-Web-Frameworks muss man zunächst nach den Kategorien full-stack und nicht-full-stack unterscheiden:

Alle nicht-full-stack Framworks benötigen als Grundlage ein anderes Framework, welches vor der Verwendung installiert sein muss. Auf das Basis-Framework kann dann das neue aufgesetzt werden. Wie dies im einzelnen zu geschehen hat, hängt von den unterschiedlichen Frameworks selbst ab. Möchte man beispielsweise bei Zope ein zusätzliches "Produkt" installieren, so reicht es, wenn man dies in den entsprechenden Ordner im Zope-Verzeichnis kopiert.

Bei den full-stack Frameworks stehen mehrere grundlegende Einbindungen zur Verfügung:

Ein Web-Framework auf dem mitgeliefertem, eigenständigen Server laufen zu lassen, bietet sich dann an, wenn noch kein Web-Server installiert ist, der Server nur für relative kurze Zeit und möglichst sofort laufen soll, oder aber zu Testzwecken. Hinzu kommt, dass in Python geschriebene Web-Sever, oder Programme allgemein, sich oft relativ einfach durch zusätzliche Features, wie beispielsweise weitere Protokolle neben HTTP und FTP, erweitern lassen. Im Normalfall kann der integrierte Server durch einen anderen, bereits bestehenden Server, beispielsweise Apache, ersetzt werden.

Für Python-Programm bietet sich außerdem die seit 2000 im Apache integrierte mod_python-Schnittstelle an. Diese ermöglicht es Python-Code ohne Umwege, über beispielsweise CGI, auszuführen. Für in Python geschriebene Anwendungen bietet diese Anbindung an einen Server vorallem Geschwindigkeitsvorteile. Für alle laufenden Python-Programme muss nur ein einziger Interpreter gestartet werden, welches bereits viel Lade- und Rechenzeit vermeidet. Hinzu kommt, dass die Prozesse die durch Anfragen entstehen nicht sofort nach Beendigung der Aufgabe zerstört werden. So kann ein Prozess nacheinander mit verschiedenen Aufgaben gefüttert werden, und der unnötige Overhead für das Erzeugen und Zerstören von Prozessen entfällt. Nachteilit ist jedoch, dass alle Skripte mit den Rechten des Serverprozesses ausgeführt werden.

Das Einbinden von Python-Programmen über CGI oder FastCGI ist im Allgemeinen sehr langsam, da unnötiger Overhead durch viele Prozesse entsteht. Von großem Vorteil ist jedoch, dass diese Schnittstellen auf nahezu jedem Server verfügbar sind und so Python-Skripte fast überall ausgeführt werden können.