Zum Inhalt springen
Der Guide für ein smartes Leben.
Web-Anwendungen mit Django

Teil 2: Django: Alternative zu PHP

Autor: Redaktion pcmagazin • 3.3.2009 • ca. 2:25 Min

Anwendung und Datenmodell Als Nächstes erstellen wir das Datenmodell in Python. Hierzu müssen wir erst eine Anwendung innerhalb des Projekts generieren. Jedes Projekt kann mehrere Anwendungen enthalten. Eine Anwendung ist dabei eine Webapplikation, die eine bestimmte Aufgabe erfüllt....

Anwendung und Datenmodell

Als Nächstes erstellen wir das Datenmodell in Python. Hierzu müssen wir erst eine Anwendung innerhalb des Projekts generieren. Jedes Projekt kann mehrere Anwendungen enthalten. Eine Anwendung ist dabei eine Webapplikation, die eine bestimmte Aufgabe erfüllt.

python manage.py startapp
solarprojects

Innerhalb des jetzt erstellten Unterordners solarprojects befinden sich die beiden Dateien models.py zur Definition des Datenmodells und views.py zur Definition der Ausgabeschicht. Öffnen Sie die Datei models.py und beginnen Sie mit der Definition des Datenmodells. Wir definieren dazu Python-Klassen, die alle von models.Model (aus django.db) erben und deren Felder ebenfalls durch models definiert werden. Ein Beispiel:

class Company(models.Model):
name = models.CharField
(max_length=50)
description = models.TextField()
projects = models.ManyToManyField
('Project',blank=True)
country = models.CharField
(max_length=50)

Hier werden bereits unterschiedliche Feldtypen verwendet: CharField für begrenzte Zeichenketten, TextField für längere Texte, DateTimeField für Datums- und Zeitangaben. Insgesamt existieren 23 unterschiedliche Feldtypen, dazu so spezielle Varianten wie URLField, EMailField oder FileField.

Bei jeder Felddefinition wird mit blank=True angegeben, ob das Feld optional ist und leer sein darf. Standardmäßig sind alles Pflichtfelder.

Die Definition projects in obigem Beispiel verweist auf die noch zu definierende Klasse Project, und zwar über ein ManyToManyField. Damit wird ausgedrückt, dass jeder Firma mehrere Projekte zugeordnet werden und wiederum auch mehrere Firmen an einem Projekt teilnehmen können. Im folgenden Beispiel sehen wir eine andere Relation über ForeignKey:

class Product(models.Model):
name = models.CharField
(max_length=50)
description = models.TextField()
company = models.

ForeignKey(Company) So definieren wir, dass jedes Produkt einer Firma zugeordnet ist. Die Klasse für die Mitarbeiter definiert ebenfalls eine solche Relation, da jeder Mitarbeiter nur bei einer Firma arbeitet.

class Employee(models.Model):
...
company = models.ForeignKey
(Company)
email = models.EmailField()
...

Die abschließende Klasse Project besitzt eine Besonderheit: Das Feld climate_zone ist als Typ CLIMATE_CHOICES definiert, der nur eine bestimmte Anzahl von Eingaben ermöglicht.

climate_zone = models.CharField
(max_length=1, choices=CLIMATE_CHOICES)

Die entsprechende Definition der Klimazonen muss natürlich vorher erfolgen. Dabei ist zu achten, dass das erste Element jeder Zuordnung, welches den Wert angibt, mit dem Typ und der Länge in der Felddefinition übereinstimmt:

CLIMATE_CHOICES = (
('T', 'Tropen'),
('S', 'Subtropen'),
('G', 'Gemaessigt'),
('K', 'Kalt'),
)

Abschließend sollten Sie noch darauf achten, dass jede Klasse die Methode __unicode__() überschreibt und eine Klartextvariante ausgibt, mit der ein Eintrag beispielsweise in einem Auswahlfeld angezeigt wird. Django verwendet diese Methode beispielsweise beim Generieren der Dropdowns im Admin-Menü. Für die Klasse Employee geben wir beispielsweise Vor- und Nachname aus:

def __unicode__(self):
return self.firstname + " " +
self.lastname;

Als Nächstes müssen wir die erstellte Anwendung noch in der Datei setting.py des Website-Rootverzeichnisses einfügen.

INSTALLED_APPS = (
...
'solarsite.solarprojects',
)

Rufen Sie jetzt folgenden Befehl auf, um die models.py Datei analysieren zu lassen:

python manage.py sql solarprojects

Als Ausgabe erscheint der SQL-Code, der zum Anlegen der Tabellen verwendet wird. Wenn keine Fehler aufgetreten sind, können Sie mit

python manage.py syncdb

die Tabellen in der Datenbank erstellen lassen. Wie Sie gesehen haben, erzeugt Django die Tabellen der ManyToMany- Relationen automatisch.

Auch die Foreign-Key-Referenzen werden korrekt definiert. Außerdem wird für jede Klasse, die von Model erbt, im Default-Modus ein Primärschlüssel namens id generiert, der als Integer mit auto-increment definiert ist. Das entspricht quasi der Anweisung

id = models.AutoField(primary_key=
True)