Python und Django und MVC
django, python, web2expo, web2expo07No Comments »Django ist ein Web Framework für die Programmiersprache Python in der Preisklasse von Ruby on Rails. Der Vortrag von Adrian Holovaty war sehr überzeugend. Besonder gefällt mir, dass Code generiert wird – alles bleibt dynamisch. Und das automatische Admin-Backend zu jeder Applikation – das will ich haben.
Die Installation war nicht ganz simple, aber nicht wichtig: zuerst mal Python installieren, MySQLDb dazu, Django aus svn auschecken. Dann noch den PATH und PYTHONPATH richtig setzen, damit Django überhaupt gefunden wird. Fertig.
Django arbeitet mit dem Model-View-Controller Konzept. Das Model ist bei einer Web-Applikation im wesentlichen die Datenbank, und für jede (wichtige) Tabelle eine Klasse die diese Tabelle repräsentiert. Die Views werden mit HTML, CSS, Javascript gebaut – ein Job für die DesignerInnen. Für mich bleibt dann im wesentlichen die Arbeit um die Controller zu programmieren.
Ich hab eine Datenbank von einem alten Projekt verwendet, und dazu ein (vereinfachtes) Model gebaut. Das geht sehr schnell. Mit anderen Systemen hatte ich an dieser Stelle schon mal das Problem, dass man die Primärschlüssel unbedingt “id” nenne muss. Das ist bei django nicht der Fall. Hier mein Beispiel:
from django.db import models
class Sprache(models.Model):
code = models.CharField(maxlength=2,primary_key=True)
name = models.CharField(maxlength=20)
class Paket(models.Model):
paketid = models.AutoField(primary_key=True)
sprache = models.ForeignKey(Sprache,db_column="sprache")
kurztitel = models.CharField(maxlength=30)
kurzbeschreibung = models.TextField()
created = models.DateTimeField('date published')
class Abo(models.Model):
abo_id = models.AutoField(primary_key=True)
aboname = models.CharField(maxlength=30)
pakete = models.ManyToManyField(Paket, filter_interface=models.VERTICAL)
Damit hab ich aus 4 Datenbank-Tabellen drei Klassen gemacht (die vierte Tabelle ist die ManyToMany-Beziehung zwischen Abo und Paket). Und jetzt kommt die Pointe: Mit nur 6 weiteren Zeilen kann ich das automatische Admin-Interface aktivieren. Wenn ich damit ein Abo editiere, wird die Many-to-Many Beziehung mit Paketen so dargestellt:

Das ist cool. Das unterstützt meine Faulheit (siehe Larry Walls Tugenden der Programmierung: Faulheit, Ungeduld, Anmaßung).
Jetzt hab ich nur noch ein kleines Problem: ich muss erst Python lernen, bevor ich wirklich was damit programmieren kann.

Recent Comments