Django – Das Python-Framework für schnelle Entwicklungsprozesse

Django baut auf dem MVC-Prinzip auf, in einer etwas abgewandelten Form. Bei Django heiß das MVT –Model-View-Template. Die Views sind in diesem Fall eher ähnlich den Controllern und Templates kann man als Views ansehen. Django bietet eine umfangreiche Template-Sprache, einen Object-relational mapper, ein automatisch erzeugtes Admin-Interface und ein mit regulären Ausdrücken anpassbares URL-Design.
Was Django von der Konkurrenz unterscheidet
Im URL-Design unterscheidet sich Django klar von der Konkurrenz um Ruby-on-Rails und PHP-Frameworks. URLs müssen explizit angegeben werden und werden nicht automatisch über Verzeichnisse oder Dateien automatisch erstellt. Dieser Punkt stellt für viele Entwickler einen Knackpunkt dar. Doch erreicht Django damit auch eine erweiterte Modularität und vor allem wird dadurch der unbefugte Zugriff auf Dateien ein Riegel vorgeschoben. Module werden in sogenannten Apps erstellt. Diese sind komplett von der Logik der Hauptanwendung getrennt und haben eigene Angaben zu Modellen, Templates und URLs. All diese Dinge können aber auch individuell und problemlos angepasst werden.
Ein großer Vorteil liegt im ORM. Durch Hilfe des Object-Relational mapper kann man mit Hilfe weniger Zeilen im Code in den Models eine Datenbankstruktur anlegen und Django erzeugt automatisch das SQL für die Erstellung der Tabellen in verschieden Datenbankmodellen wie MySQL oder PostgreSQL und erstellt dann die entsprechenden Tabellen. Durch ORM geht auch das Handling der Modelle relativ leicht von der Hand. Das Problem sind hierbei Migrationen an der Datenbank, denn Django hat standardmäßig keine Migrationsmöglichkeiten, für dieses Problem gibt es aber bereits Möglichkeiten.
Des Weiteren sind die Programmlogiken und statische Daten, bzw. Media-Dateien strikt voneinander getrennt und können zum Beispiel auch auf verschiedenen Servern liegen. Zum Beispiel bei verschiedenen Cloud-Anbietern.

Django Models
Die Einrichtung einer Entwicklungsumgebung für Django
Das Einrichten der passenden Entwicklungsumgebung geht nun auch relativ leicht von der Hand. Mit Hilfe von „Virtualenv“ kann der Entwickler sich eine von der Haupt-Python-Installation getrennte virtuelle Umgebung einrichten und mit Hilfe von PIP sich dementsprechend Django und Module nachinstallieren. Besonders leicht geht das unter Linux oder MacOSX von der Hand.
Templates in Django
Das Template-System in Django unterscheidet sich nicht großartig von bekannten Template-Engines wie Smarty für PHP. Es können Blöcke angelegt werden in der Form {% block title %}{% endblock %}
für ein Basis-Template. Diese Blöcke können in Templates die dieses Basis-Template nutzen dementsprechend angepasst werden. Variablane aus den Modellen können mit dem Befehl {{ variable }}
aufgerufen werden und Kontrollstrukten in der Form {% for x in y%}{% endfor %}
. Der Vorteil durch die Template-Engine ist unvekennbar und unverzichtbar für eine strukturierte Zusammenarbeit mit einem entwicklungstechnisch unversierten Webdesigner.
Durch all diese Dinge wird Django zu einem flexiblen Framework, das langwierige und zum Teil stumpfsinnige Entwicklungsprozesse optimiert oder auch ganz abschafft. Und Optimierung sollte der Wunsch eines jeden Entwicklers sein.
Für mich persönlich ist Django wirklich eine Bereicherung für die Welt der Webentwickler und sollte daher auch von jedem einmal getestet werden. Ich habe mich überzeugen lassen von den Vorteilen Djangos und werde in Zukunft meine Projekte zum großen Teil mit Django realisieren. Auch kleinere Projekte, denn nach dem Einrichten einer guten Entwicklungsumgebung, lassen sich auch kleine Projekte schnell und einfach realisieren.
Was haltet ihr von Django und könntet ihr euch vorstellen von anderen Scriptsprachen und Frameworks auf Django zu wechseln ?
Links
- Django offizielle Projekt-Seite – djangoproject.com
- Code-Beispiele für Django-Entwickler – djangosnippets.org
- Einrichtung einer Django-Entwicklungsumgebung – saltycrane.com
Schöner Artikel, ich finde Python vor allem wegen der Syntax interessant und habe schon lange vor, mir das mal genauer anzusehen… finde nur nie die Zeit dafür.
Das, was du hier über Django schreibst erinnert mich aber sehr an Symfony2, vor allem das, was unter dem Punkt „Was Django von der Konkurrenz unterscheidet“ steht ;)
Auf jeden Fall hab ich jetzt wieder Lust bekommen, mich doch noch mal mit Python zu beschäftigen^^
Ich habe mein letztes Projekt auch mit Django umgesetzt. Ich kannte Python und einige PHP Webframeworks. Ich war von dem ORM Teil und dem automatischen Adminbereich schon sehr erstaunt. Mein Projekt war auch sehr schnell umgesetzt. Die meiste Arbeit war wirklich der HTML, CSS und JS Part. Alles, was ich in Python schreiben musste ging sehr schnell von der Hand und war auch recht einfach umzusetzen. Aber ich denke, dass ein Tag gut reicht um sich mit dem Framework mal auseinanderzusetzen um zu erkennen, welche Vorteile es bietet.
@rob: Ich denke auch dass man ruhig mal einen Arbeitstag nutzen sollte um da reinzuschnuppern.
@ Thomas, ja da hast du Recht, manche Sachen sind auch schon woanders umgesetzt worden. Den größten Unterschied für Mich macht aber das explizite URL-Design aus.
@Sven Die explizite Definition der URLs in Django unterscheidet sich jetzt nicht sonderlich von der in Symfony. Im Vergleich zu den Django-Beispielen finde ich die Symfony2-Lösung noch eleganter. Hier mal ein Beispiel im YAML-Format:
example_route:
pattern: /example/{id}.{_format}
defaults: { _controller: „ExampleBundle:Example:show“, _format: ~ }
requirements: { id: „[0-9]+“, _format: „(html|pdf)“ }
In Symfony 1.x funktionierte das auf ähnliche Weise – das ist also kein expliziter Grund, um auf Django zu setzen ;)
@Thomas, da gebe ich dir auch Recht, aber muss ich in Symfony auch jede URL explizit definieren ? Oder geht das auch über implizite Auswege ?
Ich kann Django wärmstens empfehlen. Ich komme aus der PHP/Drupal Ecke und wollte mal ein bisschen neues Territorium entdecken. Das Deployen auf einen produktiven Server ist/war zugegebenermassen nicht ganz einfach und auch jetzt blicke ich noch nicht ganz durch, aber sonst ist es super! Ich liebe das ORM und den vorgefertigen Admin bereich und auch wie die Templates aufgebaut sind.
und wenn das admin noch schöner sein soll:
https://github.com/sehmaschine/django-grappelli
http://code.google.com/p/django-grappelli/wiki/screenshots (veraltete screenshots, zugegebenermaßen)
ein anwendungsbeispiel auch gleich mitgeliefert:
https://www.bookamat.com/
Ist das ein Scherz?
„[…] Über Python gibt es viele Vorurteile: Es sei eine schwer zu verstehende Spr
ache, ungeeignet für Einsteiger“
Python wird als einfache Einsteigersprache angesehen…
Sauber, ihr schreibt über Django! Geniales Framework.
Aber wie Raphael schon sagt, das deployment hat mir am Anfang auch Probleme bereitet. Das ist der einzige große Nachteil, den man leider erst später wirklich kennenlernt. Denn die ganze Entwicklung vorher ist super easy, mit eingebautem entwicklungsserver z.b..
Ich kann es jedem empfehlen.
@Sven: Das manuelle Konfigurieren ist in Symfony2 die übliche Vorgehensweise, es gibt aber auch z.B. das „FOSRestBundle“, welches automatisch CRUD-Urls generiert. mit einer kurzen Konfiguration hat man dann z.B. automatisch die Routen
GET /user, GET /user/{id}.{_format}, POST /user/{id}, DELETE /user/{id} usw.
Das ist im Fall einer REST-API ganz Praktisch, da hier das vorgegebene URL-Format gut passt.
Andere Plugins bieten z.B. auch die Möglichkeit, übersetzbare urls zu generieren, so dass z.B. /products/xyz und /produkte/xyz auf die gleiche Seite, aber mit ander Sprache verweisen
Kann man Django als Web Framework für H2M Interfaces in SPSS benutzen?