Django und das Framework-Ding
01.07.2007
Zusammenfassung
Ich habe schon vor längerer Zeit begonnen, mich für pragmatisches Programmieren zu interessieren. Seit Jahren schaue ich – wo ich auch PHP-Code sehe – immer auf zusammengeschriebenen Mist.
Keine Frage: Natürlich kann man mit PHP objektorientiert, modular und sauber programmieren. Doch leider geht es auch anders, weshalb so wenige Programmierer OOP beherrschen. Und PHP ermöglicht noch nicht wirklich lange die objektorientierte Programmierung, die Syntax ist dazu noch mehr als häßlich.
PHP ist außerdem sehr fehleranfällig und unübersichtlich durch die ganzen Klammern, Satzzeichen und Variablenzeichen.
Ruby on Rails
Daher habe ich schon Anfang des letzten Jahres begonnen, mich nach besseren Alternativen umzusehen. Ruby, die Programmiersprache des japanischen Entwicklers Yukihiro „Matz“ Matsumoto war die erste wirklich fantastische Alternative, über die ich gestolpert bin.
Das von David Heinemeier Hannson für 37signals entwickelte Web-Framework Ruby on Rails, war in den letzten paar Jahren in aller Munde. Daher habe ich mich seit Sommer 2006 mit dem Web-Framework beschäftigt.
Wenig später bin ich über ein weiteres Web-Framework gestolpert, das ich aber aus Zeitmangel vorerst hinten anstellen musste: Django.
Django
Django (ausgesprochen Jang-oh, mit stillem D) ist ein auf Python basierendes Framework, das von den Entwicklern Adrian Holovaty und Simon Willison für den Zeitungsverlag Lawrence Journal-World entwickelt wurde (Simon Willison ist übrigens auch einer der Köpfe hinter OpenID).
Herkunft des Namens
Django hat seinen Namen von Jean Baptiste „Django“ Reinhardt, dem virtuosen Gitarristen und Komponisten, der als Begründer des europäischen Jazz gilt. Nach einer schweren Verletzung entwickelte dieser eine Spieltechnik, bei der er mit nur zwei Fingern spielte.
Diese Leichtigkeit, mit nur zwei Fingern eine solche Perfektion hervorzubringen, war der Gedanke der Entwickler bei der Namensgebung. Wobei mir persönlich noch ein weiterer Django einfällt, der sein Handwerk mit nur einem Finger ebenfalls zur Perfektion brachte. Vielleicht ist diese Doppeldeutigkeit sogar gewollt.
Wie man im Film Snakes and Rubies erfahren kann, wurde Django so entwickelt, dass Wünsche schnell und einfach umgesetzt werden können.
Tutorials und Codebeispiele
Dank des Tutorials auf offiziellen Seite, kann man recht schnell in die wichtigsten Aspekte eintauchen. Außerdem gibt es zahlreichen Source-Code zum herunterladen, z.B. den von der Django-Seite oder den Source Code für lost-theories.com.
Django ist bald 1.0
Django ist offiziell in Version 0.96, doch das Subversion-Repository ist schon nahe an der Version 1.0. Diese ist für Anfang September 2008 geplant. Das offizielle Djangobuch ist seit dem 12. Dezember 2007 bei Amazon verfügbar.
Warum ich Frameworks einem CMS vorziehe
Nicht das man mich falsch versteht: ExpressionEngine ist ein feines Stück Software, das beste CMS, was mir bislang begegnet ist. Nur habe ich festgestellt, dass ich die vielen Module von ExpressionEngine gar nicht nutze und andere Dinge, die ich gerne haben möchte, gar nicht oder nur sehr schwer zu realisieren sind.
Man muss sich einfach den Tatsachen stellen: Mit einem Contentmanagementsystem stößt man immer wieder an seine kreativen Grenzen. Jedes dieser Systeme wird für einen speziellen Zweck programmiert. Als Blog-System, wie z.B. WordPress, oder als Community-System, wie ExpressionEngine. Dass Menschen individuelle Wünsche haben, sieht man an der Vielzahl von Plugins, die für WordPress entwickelt werden. Plugins und Module sind zwar ein guter Weg, eine Software zu erweitern, aber dies ist vom Standpunkt der Sicherheit aus betrachtet sehr kritisch.
Man hat also bei CMS-Systemen immer eine Menge riesiger Funktionen, die nie benutzt werden, ist andererseits auf Plugins von Programmierern angewiesen, die die Zeit hatten sich mit der API oder dem Plugin-System einer Software zu beschäftigen. Oft verliert man dann eine Funktionalität, wenn der Entwickler die Software nicht mehr weiterentwickelt, und diese nach einem Update nicht mehr funktioniert. Und man ist der Architektur des Systems ausgeliefert und muss sie akzeptieren, wie sie programmiert wurde.
Auch die Datenbanken sehen in einem solchen System nicht immer optimal aus. Diese werden natürlich um das CMS herum programmiert und nicht um die Daten. Mir graust schon jetzt davor, aus ExpressionEngine meine vier verschiedenen Blogs/Sections zu exportieren. Die Daten liegen über mehrere Tabellen verteilt, mit einer Menge zusätzlicher Felder in der Datenbank, die Daten der vier Bereiche gnadenlos vermischt.
Django’s beste Argumente
Die wichtigsten Punkte die für Django sprechen, waren für mich:
- komplette Kontrolle über die URI,
- einfaches Erzeugen einer Datenbank (ohne SQL benutzen zu müssen),
- ein fantastisches Admin-Tool zur Dateneingabe (und kein bloßes Scaffolding),
- wenig, übersichtlicher Code,
- rasend schneller Seitenaufbau,
- Generic-Views für die wichtigsten Wünsche (Listen, Archive, Datumsbasierende Archive, etc.) und
- eine fantastische Templatesprache (die man benutzen kann, aber nicht muss).
Django ist Python
Dazu kommt noch der wichtigste Punkt: Django ist Python. Zwar bin ich mit Python genauso Neuling wie mit Django, aber Python ist schon 5 Jahre älter als PHP und hat sich still und leise im Hintergrund durchgesetzt. So nutzen Google oder die NASA für ihre Anwendungen Python (um nur einige zu nennen).
Schon nach kurzer Beschäftigungszeit mit Python bin ich von der Syntax fasziniert. Und es ist beeindruckend welche fantatischen Projekte und Module die Python-Community entwickelt hat.
Und nun?
Fazit: Die Tutorials sind gemacht, die Dokumentation quergelesen, das Djangobuch (soweit schon online) gelesen, die Grundlagen von Python gelernt, Webspace bei einem Django-Hoster ist gekauft gemietet. Es kann also losgehen.
kogakure.de wird wohl mein erstes Projekt, zumal beim letzten ExpressionEngine-Update etwas schief gelaufen ist, und ich jetzt einen 1.52/1.6 Mutanten habe. Da das letzte Backup – wie zu erwarten – schon etwas her war, ist die Arbeit kogakure.de mit EE 1.6 sauber aufzusetzen wahrscheinlich gleich oder sogar größer einem Relaunch mit Django.
