Einführung
**********
Was ist Django?
===============
`Django `_ ist ein in `Python
`_ geschriebenes **Full Stack Framework**, dass die
schnelle Entwicklung von **Web-Applikationen** ermöglicht. Dabei wird Wert auf
sauberen Code und die **Wiederverwendbarkeit der einzelnen Komponenten**
gelegt.
Benannt wurde das Framework nach dem Gitarristen `Jean „Django“ Reinhardt
`_, der als einer der Begründer
des europäischen Jazz gilt.
Der Quellcode und die `umfangreiche Dokumentation
`_ sind unter einer **BSD-Lizenz** lizensiert.
Die `Django Software Foundation `_
stellt die Weiterentwicklung von Django sicher.
Rapid Development
=================
Django unterstützt durch seine Architektur und Werkzeuge eine schnelle
Entwicklung (**Rapid Development**) von Websites und neuen Komponenten.
Loose Coupling
==============
**Loose Coupling**, also die lose Koppelung der verschiedenen Teile des
Frameworks und der Applikation, stehen bei Django stark im Vordergrund.
Dadurch soll die Qualität und Wiederverwendbarkeit des Codes erhöht werden.
.. _dry:
Don't Repeat Yourself
=====================
Das Prinzip **Don't Repeat Yourself (DRY)** ist wie folgt definiert:
*Every piece of knowledge must have a single, unambiguous, authoritative
representation within a system.*
http://c2.com/cgi/wiki?DontRepeatYourself
**DRY** ist damit unter anderem eine Vorraussetzung für **Loose Coupling**,
denn Komponenten lassen sich nur dann gut voneinander separieren, wenn man
klar sagen kann welche Aufgaben sie erledigen.
Außerdem erleichtert es die tägliche Arbeit, wenn der Code nicht über
verschiedene Teile der Applikation verteilt ist, sondern dort zu finden ist,
wo man ihn auch erwarten würde.
Model-Template-View
===================
Django ist nach dem **Model-Template-View (MTV)** Muster aufgebaut. **MTV**
orientiert sich am bekannten `Model-View-Controller Muster
`_ (MVC).
Der in Django enthaltene **Object Relational Mapper** (ORM) überträgt die
Models in Datenbankstrukturen und führt alle Operationen in der Datenbank
durch. Es können alle gängigen Datenbanken benutzt werden. Alle Models werden
in Python geschrieben.
Die **Template-Engine** unterstützt die Vererbung von Templates und bietet
umfangreiche Filter und Templates. Diese können auch selbst erweitert werden.
Der **View** holt die Daten, zum Beispiel mit Hilfe des **Object Relational
Mappers**. Es können aber auch anderen Datenquellen genutzt werden.
Die **URLConf** steuert das Routing. Mit Hilfe von regulären Ausdrücken wird
der Request dem richtigen View zugewiesen.
.. _grafik_request_response:
.. digraph:: request_response
label = "Schematische Darstellung einer Request / Response Verarbeitung"
{rank=same; "Browser" "Webserver"}
{rank=same; "URLConf" "View"}
"Browser" -> "Webserver" [label="Request"];
"Webserver" -> "URLConf" [label="Request"];
"URLConf" -> "View" [label="Request"];
"View" -> "Model (ORM)" -> "Datenbank"-> "Model (ORM)" -> "View"
"View" -> "Template" [label="Context"];
"Template" -> "Tags & Filter" -> "Template"
"Template" -> "View" [label="HTML"];
"View" -> "Webserver" [label="Response"];
"Webserver" -> "Browser" [label="Response"];
Eingebauter Entwicklungs-Webserver
==================================
Der in Django enthaltene **Entwicklungs-Webserver** hilft bei der Entwicklung,
da nicht extra ein "vollwertiger" Webserver installiert werden muss.
Die Admin-Applikation
=====================
Django stellt mit der **Admin-Applikation** ein `CRUD
`_-Interface bereit, mit dem sich eine
Website ohne Aufwand pflegen läßt. Die **Admin-Applikation** wird mit Hilfe
der Models automatisch erstellt.