Open Source im professionellen Einsatz

Webprogrammierung in Python/Django und PHP

Asyl für Django

,

Der Trend zu Webapplikationen zwingt einstige HTML-Künstler ins Programmiererlager. Nur, wo schaut man sich einen guten und effizienten Stil ab? Der folgende Artikel beschreibt, wie ein Python-Guru mit Hang zu einem gewissen Django und ein PHP-Papst eine von der Redaktion vorgegebene Aufgabe lösen.

Mit PHP oder in Python/Django, womit lassen sich Webanwendungen schneller und eleganter erstellen? Zeev Suraski sowie Douglas Napoleone im Auftrag von Guido van Rossum versuchten sich an einer Standard-Anwendung, einer einfachen Musikdatenbank (vergleiche Kasten "Aufgabenstellung"). Der Code steht unter [1] zum Download bereit.

Aufgabenstellung

Das Linux-Magazin den beiden Kandidaten eine Webanwendungen in Auftrag die eine Musikdatenbank bereitstellt. Außer der Anzeige der Titel sollen die Anwendung noch folgende Funktionen beherrschen: Suche in der Datenbank, Anpassen existierender Titel und Eingabe neuer Titel.

Django und Python

Im Umfeld von Python hat der Entwickler die Auswahl gleich aus einer ganzen Reihe von Frameworks, darunter Django [2], SQLAlchemy [3], Storm [4] oder ZoDB [5], die jeweils einen verschiedenen Fokus haben. Die Einsendung von Douglas Napoleone, nutzt das weit verbreitete Django in der Version 0.96, das die meisten Linux-Distributionen als Paket »python-django« mitbringen. Als Napoleone die Aufgabenstellung las, stellte er die kühne These auf, die Aufgabe lasse sich in unter einer Stunde lösen.

Angestellt als Senior Speech Research Engineer bei Nuance Communications, arbeitet er am modularen Spracherkennungssystem "Dragon Naturally Speaking". Zum Testen seiner Software verwendet er oft Python und nutzt ein Fünftel seiner Arbeitszeit dazu, die Sprache zu erweitern. Napoleone organisiert darüber hinaus User-Konferenzen wie die Pycon US.

Der Amerikaner verwendet die stabile Version 0.96 von Django, die sich in Details von ihren Vorgänger- und Nachfolgerversionen unterschiedet, die Website dokumentiert sie ausführlich. Das Framework bringt seinen eigenen kleinen Entwickler-Webserver mit, sodass der Entwickler in der Entstehungsphase keinen Apache oder anderen Server zusätzlich konfigurieren braucht.

Ein neues Projekt richtet Napoleone mit »django-admin.py startproject Projekt« ein. Das Tool liegt im »bin«-Pfad der Django-Distribution und richtet ein Verzeichnis Dateien ein. In diesem Verzeichnis führt der US-Amerikaner »django-admin.py startapp Anwendungsname« aus, was weitere Dateien erzeugt.

Dort bearbeitet der Programmierer »settings.py«, um die Datenbank anzubinden; für populäre hat Django bereits Templates vorbereitet. Dank SQLite reicht eine lokale Datei im Filesystem zum Speichern kleiner Datenmengen. Weiterhin trägt er in »INSTALLED_APPS« noch »django.contrib.admin« und die eigene Anwendung »jukebox« ein.

Die Uhr tickt: Projektstart

Im Verzeichnis der Applikation liegt die Datei »models.py«, die Napoleone ebenfalls anpasst, um das Datenmodell zu beschreiben (siehe Listing 1). Die Angaben lassen sich direkt aus einem bestehenden Datenmodell ableiten. Attribute definieren bereits die Reihenfolge der Sortierung (»ordering«) oder das Format der Daten (etwa »NumberIsInRange(1000, 9999)« für die Jahreszahl).

Ist das Datenmodell spezifiziert, legt »manage.py syncdb« im Projektverzeichnis alle Tabellen der Datenbank an und fragt gleich nach einem Benutzer für die Authentisierung der Anwendung. Die Applikation ist nun schon bereit und der Entwickler startet den eingebauten Webserver mit »manage.py runserver«. Ein Browser zeigt unter [http://localhost:8000] bereits die Anmeldemaske und anschließend die Anwendung (Abbildung 1).

Abbildung 1: Django braucht lediglich ein Datenmodell und Filterregeln für eine benutzbare Weboberfläche.

Abbildung 1: Django braucht lediglich ein Datenmodell und Filterregeln für eine benutzbare Weboberfläche.

Das Framework legt pro Tabelle eine Such- und Darstellungsmaske an, die der Programmierer über das Modell feiner konfiguriert. Hier sind die grundlegenden Datenbankoperationen schon eingebaut, Datensätze lassen sich hinzufügen, löschen oder in der Detailansicht modifizieren. Tabellenansichten sind sortierbar oder nach Suchbegriffen filterbar, ohne dass der Entwickler dazu nennenswerten Code verfassen muss.

Um initiale Daten in die Anwendung zu laden, verwendet Napoleone so genannte Fixtures, die er im JSON-Datenformat [6] in der Datei »fixtures/initial_data.json« anlegt. Sie lädt die Applikation als initiale Daten bei einem Neustart; Änderungen, die Benutzer vornehmen, landen aber in der SQLite-Datei, die in »settings.py« konfiguriert ist.

Diesen Artikel als PDF kaufen

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook