Willkommen zu deinem Abenteuer

Novice Explorer

Du wirst von deinem treuen Gefährten begleitet:

Scallywag the Sea Turtle 🐢

Zögere nicht, seine Hilfe zu suchen.

Chapter 1

Lerne dein Handwerk!

Zuerst wirst du dich mit den grundlegenden Basics und Werkzeugen vertraut machen, dein Wissen für dein Abenteuer mit Django aufbauen und alles lernen, um deine Abenteuer zu meistern.

Was ist Django?

Was ist Django?

  • Fullstack-Framework: enthält alles, um eine Webanwendung zu entwickeln
  • Don't Repeat Yourself
  • Client-Server Architektur (Request-Response-Schema)

ARCHITEKTUR

Die drei Hauptbestandteile der Django-Architektur:

  • MODEL: Arbeit mit Daten und Datenbanken
  • TEMPLATE: Ausgabekomponente, die mithilfe eines Kontextes gefüllt werden
  • FRAMEWORK: behandelt Kommunikation zwischen Benutzer und Datenbank und so viel Arbeit wie möglich ab
Zur Unterstützung während der Entwicklung:
  • manage.py-Skript
    • erzeugt Migrationen
    • startet Development-Server
    • etc.

Du bist dran

beim Projekt-Setup

  1. Projekt auschecken:
    https://github.com/exxcellent/exxplored-django.git
  2. Projekt in PyCharm öffnen

Python Poetry Interpreter anlegen

[strg] + [shift] + [a] → "python interpreter"

Development-Server starten

In einem PyCharm Terminal

python manage.py runserver
aufrufen.

Im Browser http://localhost:8000/ aufrufen

Interaktives Debugging aus der IDE

Lege in PyCharm eine neue Run Configuration an:

Stoppe den zuvor über das Terminal gestarteten Server und starte die neue Run Configuration im Debug Modus.

🎉 Fertig 🎉

Erkunde doch ein wenig die Verzeichnisstruktur & Dateien des Repositories.

VERZEICHNISSTRUKTUR


PROJEKT_ROOT
|-+ eXXploreDjango         # Django-Projekt-Verzeichnis
|   |-- asgi.py
|   |-- settings.py      # Einstellungen zum Django-Projekt
|   |-- urls.py          # URL-Definition für den Dispatcher
|   |-- wsgi.py
|-+ app1                 # Django-App 1
|   |-- migrations       # Migrationen
|   |-- templates        # Templates
|   |-- models.py        # Models
|   |-- views.py         # Views
|-- app2                 # Django-App 2
|-- manage.py            # Verwaltungsskript
            

Quest 1.1

Deine erste App!

In Django werden logisch zusammenhängende Code-Stücke in Apps gebündelt. Diese Apps sollten so wiederverwendbar wie möglich sein. Lass uns deine erste App erschaffen.

  • Apps sollen reusable sein → Projekt in logische Einheiten teilen
  • Anlegen neuer App
    python manage.py startapp app1
  • Anschließend in INSTALLED_APPS innerhalb der "settings.py" eintragen

Chapter 2

Django Views

Die erste View

„Views sind Python-Methoden, die einen Request entgegen nehmen und mit einer Response antworten“ Zitat: Die Tutoren (heute)

Der erste View

  • Views werden über einen/mehrere Path(s) angesprochen
  • Dispatcher weiß dadurch, ob und was er im Fall eines Requests an eine URL tun soll
  • Dispatcher ruft die Methode mit dem aktuellen Request und etwaigen Parametern auf
  • Alle URLs (Endpoints) werden in einer zentralen Datei ("urls.py") gepflegt und sind projektweit gültig

Beispiel


                    

                    

Quest 2.1

Und jetzt dein erster View!

Erstelle in deinem Projekt eine neue App "pirate_ship"

Lege in dieser neuen App einen View an, der die Anzahl der Piraten anzeigt, die bereits über die Planke gegangen sind. Außerdem soll ein Link angezeigt werden, um die Zahl um 1 zu erhöhen, sowie ein weiterer Link, um die Zahl um 1 zu verringern.

So ähnlich sollte es aussehen:

weniger | über die Planke: 5 | mehr

Quest 2.2

Aye Aye Captain!

Lege einen weiteren View an, der den Benutzer nach dem Name des Kapitäns fragt

Name:

Der Name soll abgesendet werden können und anschließend den Kapitän mit seinem Namen freundlich begrüßen. Außerdem soll die Begrüßungsseite einen Link zurück zur Namenseingabe enthalten.

Aye aye Captain Blackbeard! back

🎉 Fertig 🎉

Sternchenaufgabe: Versuche doch auf eine Falscheingabe (leer?) des Namens mit einer entsprechenden Meldung zu reagieren.

Chapter 3

Templates

Was versteht Django unter Templates?

  • Plain-Text-Dateien
    + Template-Syntax
    + Daten-Kontext
  • Verschiedene Template-Sprachen verfügbar
  • Möglichst wenig „Logik“

D
jango
T
emplate
L
anguage

  • Mitgeliefert + Standard
  • Variablen: Befüllt durch Kontext
  • Filter: Ändern den Wert einer Variablen und geben ihn aus
  • Tags: Kontrollstrukturen und mehr
  • Kommentare
  • Vererbung
  • Hier gehts zur Doku

Beispiel
Basistemplate


                

Beispiel
Seitentemplate


                

Quest 3.1

Dein erstes Template!

  1. Lege in deiner „pirate_ship“ app ein neues Verzeichnis „templates“ an. Platziere dort eine neue „first_template.html“ (Rechtsklick auf den Ordner -> „New“ -> „HTML File“) und fülle den Body mit etwas Text. Lege einen neuen View sowie Route an, der die neue „first_template.html“ über den „render()“-Shortcut (Django-Render-Shortcut) ausgibt.
  1. Deine Laufzeitumgebung enthält schon eine Fremd-App namens „bootstrap4“ (außerhalb der Verzeichnisstruktur) die das Bootstrap-CSS-Framework bereitstellt.
    Die Library bietet verschiedene Template-Tags an, die eine Einbindung der Static-Files von Bootstrap erleichtern. Binde die App „bootstrap4“ in dein Projekt ein („settings.py“). Lege ein neues Template „first_bootstrap_template.html“ an und binde die CSS und JS Teile im Head des Dokumentes ein (Django-Bootstrap4-Doku).
    Teste alles mithilfe eines neuen Views, Route + einigen Features des Bootstrap Frameworks (z.B. Alerts etc.).
  1. Kopiere das Template aus 2. als „base.html“. Dieses soll als Basis für beliebige Seiten verwendet werden können. Hier enthalten sein sollen alle Teile, die nicht spezifisch einer bestimmten Seite zugeordnet werden können (Header, Imports, evtl. Basislayout der Anwendung). Ersetze alle Stellen, die Inhalt enthalten, durch Blöcke, die durch spätere Templates dann mit Inhalten gefüllt werden können (DTL-Doku). Erstelle ein weiteres Template, das die gleiche Seite erzeugt wie 2., aber selbst nur das „base.html“ extended und die notwendigen Blöcke befüllt. Zeige die Seite über einen eigenen View + Route an.
  1. Lege ein Template an, das vom View per Kontext eine Liste von Schiffsnamen erhält und diese in einer zweispaltigen Bootstrap Tabelle anzeigt. Schiffsnamen, die ein Leerzeichen enthalten, sollen dabei mit dem Info-Background (Blau) hinterlegt werden. Die Nummer des Schiffs kannst du vom View aus mitgeben - musst du aber nicht. Versuche es auch mal ohne 😄
# Ship
1 Black Pearl
2 Roebuck
3 Bonita

🎉 Fertig 🎉

Trinke einen ☕
oder schau dir Jinja2 an. Das ist eine weitere Templating-Sprache die offiziell von Django unterstützt wird. Werf doch mal einen Blick in deren Doku!

Chapter 4

Object Relational Mapping

Die grundlegenden Bestandteile von Django sind das ORM (Object-Relational Mapping), ein Werkzeug zur Datenbankinteraktion, und die Verwaltung von URLs.

In Django erstellt man Entitäten namens "Models" – einfache Python-Klassen. Django übernimmt die Verantwortung, diese Entitäten dauerhaft zu speichern. Jegliche Änderungen an diesen Models werden automatisch im Datenbankschema reflektiert, und in den meisten Fällen kann das Verwaltungstool "django-admin" diese Änderungen automatisch umsetzen.

Ein Beispiel:

Quest 4.1

Erstelle in deiner Django-Anwendung ein Model namens 'Treasure', das dazu dient, einen entdeckten Schatz innerhalb deines Schiffes zu halten. Dieses Model ermöglicht es, wichtige Informationen wie den Fundort des Schatzes, das Datum seiner Entdeckung, seinen geschätzten Wert und eine fesselnde Beschreibung zu speichern.

Quest 4.2

Nutze 'django-admin', um eine Datenbankmigration für den Schatzkatalog zu erstellen. Führe dann diese Migration aus, um den Schatz innerhalb der Datenbank zum Leben zu erwecken.

Quest 4.3

Nutze die interaktive Python-Konsole, um neue 'Treasure'-Entitäten zu erstellen. Gib diesen Objekten Leben, indem du ihnen die Essenz der Schätze einhauchst, die du bewahren möchtest.

Quest 4.4

Erstelle eine neue Ansicht, in der alle vorhandenen 'Treasure'-Entitäten aus der Datenbank angezeigt werden. Nutze die Funktionen von Django, um diese Schätze abzurufen und ihren Wert darzustellen.

Quest 4.5

Füge der 'Treasure'-Entität ein zusätzliches Attribut namens 'notes' hinzu. Verwende 'django-admin', um eine Migration zu erstellen, die diese Erweiterung erfasst. Führe die Migration aus, um 'notes' in der Datenbank zu manifestieren. Zeige dieses neue Attribut in deiner Ansicht an, sodass es neben den anderen Informationen jedes Schatzes angezeigt wird.

Chapter 5

Django Admin

Django liefert bereits eine App namens 'django.contrib.admin' mit. Diese erstellt vollständige Admin-Ansichten für alle Models in einem Projekt - inklusive entsprechender Workflows wie Create, Edit, Delete.

In deinem Projekt ist 'django.contrib.admin' bereits aktiviert. Die zu verwaltenden Models müssen nur noch registriert werden und schon erhält man entsprechende Ansichten!

Ein Beispiel:

Quest 5.1

Registriere dein 'Treasure'-Model in 'django.contrib.admin'. Für den Zugriff auf die Admin-Seiten musst du noch einen Benutzer anlegen (ja, Django kommt automatisch mit einer vollständigen Benutzer-/Rechteverwaltung). Hierfür kannst du wieder 'django-admin' verwenden.

Quest 5.2

Rufe die Django-Admin-Seiten auf und erstelle, editiere und lösche einige 'Treasures'. Welche anderen Models siehst du schon im Admin?

Chapter 6

Django Forms

Was sind Django-Forms?

  • Python-Klassen
  • Ähnlich zu Models aber für Dateneingabe
  • Erzeugen aus Klasse automatisch HTML-Formular
  • Extrahieren Eingaben aus Request
  • Validieren Eingaben und übersetzen sie in Python Datentypen

Beispiel



            


            

Model-Forms

Automatische Erstellung einer Form aus einem Model



            


            

Jetzt deine

eigenen Forms

Quest 6.1

  1. Erstelle einen View + Template um einen 'Treasure' über ein ModelForm anzulegen. Validierungsfehler sollen angezeigt werden.
  2. Erstelle einen View + Template um einen 'Treasure' über ein ModelForm zu editieren. Validierungsfehler sollen angezeigt werden.

🎉 Fertig 🎉

Chapter 7

(Generic) Class-Based-Views

Was sind Class-Based-Views?

  • Klassen, die eine dispatch()-Methode anbieten
  • dispatch() wird vom URL-Dispatcher aufgerufen (wie eine View-Methode)
  • Modular + erweiterbar durch Vererbung etc.

Beispiel



            


            

Und was sind Generic Views?

  • Mitgelieferte Views, die alle Standardfälle abdecken
  • Immer Konglomerat aus Mixins + Basis-View
    • Mixins implementieren Funktionalität
    • Werden im Basis-View nur noch aufgerufen + zusammengesteckt
  • Empfehlung: Immer zuerst in Django-Doku nachsehen, ob es schon was Fertiges gibt

Beispiel BaseDetailView



            


            

Langsam wird's

richtig produktiv

Quest 7.1

Erstelle eine Class-Based-View zur Auflistung aller 'Treasures'. Verwende hierzu die Generic-Views, die Django schon mitliefert.

Quest 7.2

Baue deine Views zum Anlegen/Editieren von 'Treasure'-Objekten auf Class-Based-Views um. Verwende hierzu die Generic-Views, die Django schon mitliefert. Interessant ist auch das Handling bei einem erfolgreichen Speichern (also keine ValidationErrors), denn hierbei muss Django entscheiden, wohin der Anwender weitergeleitet wird. Django gibt dir bei fehlender Konfiguration Hinweise, was du tun musst!

Quest 7.3

Man soll einzelne 'Treasures' auch löschen können - implementiere hierzu die Funktionalität inkl. einer Rückfrage, ob man sich wirklich sicher ist.

Quest 7.4

Aktuell lassen wir den Benutzer im Dunklen, ob das Anlegen/Bearbeiten/Löschen überhaupt funktioniert hat - das wollen wir ändern. Django bietet über das Messages-Framework eine integrierte Möglichkeit einmalige Benachrichtigungen an den Benutzer weiterzugeben, die über genau solche Sachverhalte aufklären. Implementiere entsprechende Messages beim Anlegen/Bearbeiten/Speichern. Das Basis-Template ist ein guter Platz diese Messages zu rendern. Beachte auch die Dokumentation von django-bootstrap4 in Bezug auf messages.

🎉 Fertig 🎉

Hey, adventurer

Deine ersten Schritte sind gemacht und markieren den Beginn einer großen Reise, bei der Mut und Klugheit deine Geschichte prägen werden.

Du beherrscht nun die wichtigsten Werkzeuge und kannst nun auf einem höheren Schwierigkeitsgrad dein Abenteuer fortsetzen .

Auf in ein neues Abenteuer als 'Adventurous Artifact Conqueror'