3. Django

_images/django-logo.png

3.1. Einführung

3.1.1. Was ist Django?

Django ist eine Open Source Web-Anwendungs-Framework, geschrieben in Pyhton. Diese Web-Framework ist ein Baukastensystem, das mit vielen vorgefertigten Vorlagen die Arbeit der Entwickler von Web-Anwendern stark erleichtert. Hierbei werden Elemente wie Benutzerverwaltung, Administrationsbereiche, Formulare usw. in dem Framework als fertige Vorlagen angeboten.

3.1.2. Django Architektur

Django benutzt eine Model-View-Template Architektur. Es ist eine Sammlung von drei wichtigen Komponenten, Model, View und Template. Das Model hilft beim Umgang mit Datenbanken. Es ist eine Datenzugriffsschicht, die die Daten verarbeitet. Das Template ist eine Präsentationsebene, die den Benutzeroberflächenteil vollständig verwaltet. Die View wird verwendet, um die Logik auszuführen und mit einem Model zu interagieren, um Daten zu übertragen und ein Template zu rendern. Django folgt zwar dem MVC-Muster, behält aber seine eigenen Konventionen bei. Die Kontrolle wird also vom Framework selbst übernommen.

Es gibt keinen separaten Controller und die vollständige Anwendung basiert auf Model, View und Template. Deshalb heißt es MVT-Anwendung.

In der folgenden Grafik ist der MVT-basierte Kontrollfluss dargestellt.

_images/django-architecture.png

3.1.3. Pro und Contra

_images/django-pro-contra.png

3.2. Models

3.2.1. Definition

Ein Model in Django ist eine Klasse, die aus der django.db Bibliothek importiert wurde und als Brücke zwischen Ihrer Datenbank und dem Server fungiert. Diese Klasse ist eine Darstellung der von Ihrer Website verwendeten Datenstruktur. Diese Datenstruktur wird direkt mit der Datenbank verknüpft.

3.2.2. Vorteile von Django Models

Ein Model ist, wie aus der Definition bekannt, die Verbindung zwischen Server und der Datenbank. Wenn nun Daten benötigt werden oder eine Operation ausgeführt wird, bei der Daten vom Server benötigt werden, die im Wesentlichen nur Daten aus Ihrer Datenbank abrufen, benötigen Sie eine Middleware oder Bridge um die Daten in ein übertragbares Format kovertiert. Dort kommt das Model in Spiel.

Das Model ruft die Daten nicht nur ab und konvertiert sie in das gewünschte Format, sondern führt sie auch durch Anwenden des logischen Teils / Backends Ihrer Website aus, der sich tatsächlich in der Modelkomponente befindet.

Es kann weiterhin jede Datenbank verwendet werden, da im Wesentlichen Python-Code geschrieben wird. Django hat Unterstützung für fast alle Datenbanken integriert.

3.3. Views

Die View ist eine Komponente in der Django MVC-Architektur, die die Logik enthält, die dem Benutzer angezeigt werden soll. In einer traditionellen MVC-Architektur wird dies durch Koordination mit Model und Controller implementiert. Es stellt ein Problem dar, dass die Views sowohl vom Modell als auch vom Controller abhängen, sodass sie durch zwei Komponenten gerendert werden. Dies verstößt gegen die Designphilosophie von MVC, da eine Komponente zu stark von anderen Komponenten abhängig ist.

Die oben genannten Probleme wurden durch die MTV-Architektur von Django gelöst, bei der die Ansicht nur die Geschäftslogik enthielt, d. H. Welche Webseite bei welcher Eingabe gerendert werden sollte, und auch ein Vermittler zwischen Model und Vorlage wurde.

3.3.1. Klassenbasierte Views

Django begann zunächst nur mit funktionsbasierten Ansichten, fügte dann aber klassenbasierte Ansichten hinzu, um die Funktionalität zu templatisieren. CBVs (Class-Based-Views) sind eine Möglichkeit, die Produktivität zu steigern, indem kein Code mehrfach geschrieben werden muss.

Die Organisation des Codes in Bezug auf bestimmte HTTP-Methoden (GET, POST usw.) wird anstelle der bedingten Verzweigung als separate Methoden angezeigt.

Objektgesteuerte Techniken wie Mehrfachvererbungen werden in wiederverwendbare Komponenten programmiert . Die klassenbasierten Ansichten ersetzen keine funktionsbasierten Ansichten, sind jedoch dank der Vererbung einfach zu implementieren und optimaler.

3.3.2. Funktionsbasierte Views

Eine Viewfunktion, oder kurz View, ist eine Python-Funktion, die eine Webanforderung entgegennimmt und eine Webantwort gibt. Diese Antwort ist der HTML-Inhalt einer Webseite, ein XML-Dokument, eine Umleitung, ein 404-Fehler oder ein Bild. Die View selbst besteht aus einer beliebigen Logik, die erforderlich ist, um diese Antwort zurückzugeben.

Diese Funktion ist einfach zu implementieren und sehr nützlich. Der Hauptnachteil besteht jedoch darin, dass bei einem großen Django-Projekt in den Views im Allgemeinen viele ähnliche Funktionen vorhanden sind. Ein Beispiel ist, dass alle Objekte eines Django-Projekts CRUD-Operationen haben, daher wird dieser Code unnötig wiederholt. Dies war der Hauptgrund für die Erstellung generischer Klassenbasierter Views.

3.4. Die wichtigsten Elemente

3.4.1. Administration

Ziel von Administrationstemplates ist es, eine Benutzeroberfläche für die Ausführung von Verwaltungsvorgängen an Benutzermodellen und anderen Funktionen, wie Authentifizierung, Benutzerzugriffsebenen usw., bereitzustellen. All dies sind Funktionen, die den Administrator produktiver machen.

_images/django-administration.png

3.4.2. Internationalisierung und Lokalisierung

Django bietet umfassende Unterstützung für die Übersetzung von Text in verschiedene Sprachen sowie eine länderspezifische Formatierung von Datums-, Uhrzeit-, Zahlen- und Zeitzonen. Entwickler können festlegen, welche Teile ihrer Webanwendung für lokale Sprachen und Kulturen übersetzt oder formatiert werden sollen.

3.4.3. Authentifizierung

Django verfügt über ein voll ausgestattetes und sicheres Authentifizierungssystem. Es verwaltet Benutzerkonten, Gruppen, Berechtigungen und Cookie-basierte Benutzersitzungen. Auf diese Weise können auf einfache Weise Websites erstellt werden, auf denen Benutzer Konten erstellt und sich sicher an- und abmelden können.

3.5. Sicherheit

Django bietet mehrere Schutzmechanismen gegen:

3.5.1. Clickjacking

Clickjacking ist eine Technik, bei der ein Computerhacker die Darstellung einer Internetseite überlagert und dann deren Nutzer dazu veranlasst, scheinbar harmlose Mausklicks und/oder Tastatureingaben durchzuführen.

3.5.2. Cross-site scripting

Bezeichnet das Ausnutzen einer Computersicherheitslücke in Webanwendungen, indem Informationen aus einem Kontext, in welchem sie nicht vertrauenswürdig sind, in einen anderen Kontext eingefügt werden, in dem sie als vertrauenswürdig eingestuft werden. Aus diesem vertrauenswürdigen Kontext kann dann ein Angriff gestartet werden.

3.5.3. Cross Site Request Forgery

Hacker übernehmen eine vom Nutzer autorisierte Session und können so schadhafte Aktionen durchführen. Dies geschieht über HTTP-Requests.

3.5.4. SQL injection

Das Ausnutzen einer Sicherheitslücke in Zusammenhang mit SQL-Datenbanken, die durch mangelnde Maskierung oder Überprüfung von Metazeichen in Benutzereingaben entsteht.

3.5.5. Remote code execution

Es ermöglicht einem Angreifer, Schadsoftware innerhalb des Zielsystems im lokalen Netzwerk oder über das Internet remote auszuführen.

3.6. Praxisbeispiel

Als Beispiel wird ein simpler Blogpost erstellt auf dem einzelne Beiträge gepostet und angesehen werden können. Es soll ebenfalls eine Übersicht über die zuletzt erstellten Beiträge geben. Mit einem Klick auf einen einzelnen Beitrag soll eine ausführliche Ansicht alle Informationen anzeigen.

_images/django-praxis1.png _images/django-praxis2.png