Erste Schritte mit Ansichten

Abgeschlossen

In der Programmierung ist eine Ansicht in der Regel eine Komponente, die Informationen für den Benutzer anzeigt. Die Aufgaben, die eine Ansicht ausführt, können je nach Framework und Konventionen variieren, einschließlich der Verantwortung für das Laden von Daten.

In Django ist eine Ansicht in der Regel für Folgendes verantwortlich:

  • Überprüfen der Anforderung eines Benutzers.
  • Laden oder Ändern der entsprechenden Daten.
  • Zurückgeben einer HTML-Vorlage mit den Informationen an den Benutzer.

Wir beginnen unsere Untersuchung, indem wir die manuelle Erstellung von Ansichten und die Konfiguration der entsprechenden URLconfs behandeln. Eine URLconf ist eine Liste von Pfaden, die das abzugleichende Muster, die aufzurufende Funktion und optional einen Namen angibt. In einer späteren Lerneinheit werden wir sehen, wie Django einen Teil des Codes, den wir manuell geschrieben haben, automatisch verarbeiten kann.

Erstellen einer Ansicht

Um in Django eine Ansicht von Grund auf neu zu erstellen, erstellen Sie in der Regel eine Funktion. Die Funktion enthält im Allgemeinen den entsprechenden Code für Folgendes:

  • Ausführen der vom Benutzer angeforderten Aufgabe.
  • Zurückgeben einer Vorlage mit den entsprechenden Daten, die dem Benutzer angezeigt werden sollen.

Ansichtsfunktionen akzeptieren immer mindestens einen Parameter namens request, der die Anforderung des Benutzers darstellt. Sie können nach Bedarf weitere Parameter angeben, wenn Sie in der URL weitere Informationen vom Benutzer erwarten, z. B. den Namen oder die ID eines Elements. Sie registrieren diese, wenn Sie die Route erstellen. Dies wird später in der Lerneinheit behandelt.

Laden von Daten

Sie können den Django-ORM verwenden, um alle benötigten Daten aus der registrierten Datenbank zu laden.

Das Projekt, das wir erstellen, verfügt über zwei Modelle: Shelter und Dog. Mithilfe der von uns erstellten Modelle können alle Objekte geladen oder andere Abfragen durchgeführt werden. Um beispielsweise alle Tierheime zu laden, verwenden wir Shelter.objects.all(). Wir können ein einzelnes Tierheim mithilfe von Shelter.objects.get(pk=1) laden.

Hinweis

pk ist die Kurzform für „Primärschlüssel“. Sie können mit id das gleiche Ergebnis erzielen, aber die Verwendung von pk stellt sicher, dass der Befehl funktioniert, wenn Sie die Eigenschaft, die den Primärschlüssel darstellt, in einen anderen Namen geändert haben.

404-Fehler

Ein 404-Fehler in Webanwendungen bedeutet „Nicht gefunden“. Als bewährte Methode sollten Sie einen 404-Fehler zurückgeben, wenn eine Anforderung für ein Objekt erfolgt, das nicht vorhanden ist.

Django stellt Kurzformen zum Laden von Daten bereit:

  • get_object_or_404 und get_list_or_404: Lädt ein Objekt anhand eines Primärschlüssels oder gibt 404 an den Benutzer zurück, wenn ein Objekt nicht gefunden wurde.
  • get_list_or_404: Führt den gleichen Vorgang wie die andere Kurzform aus, mit der Ausnahme, dass ein Filterparameter akzeptiert wird.

Wir verwenden get_object_or_404 in unserer Übung.

Rendern der Vorlage

Die Vorlagen-Engine von Django verwendet die von uns erstellte HTML-Vorlage, kombiniert sie mit den von uns bereitgestellten Daten und gibt das HTML für den Browser aus. Die Hilfsfunktion zum Ausführen dieser Aufgabe ist render.

Die render-Funktion benötigt das Objekt, das die Anforderung darstellt. Dies ist der request-Parameter, den wir zuvor hervorgehoben haben. Außerdem übergeben Sie den Namen der Vorlage, in der Regel eine HTML-Datei, die sich in einem Ordner namens templates befindet.

Um Daten an die Vorlage zu übergeben, geben Sie render mit einem context-Wörterbuchobjekt an. Das context-Objekt enthält einen Satz von Schlüssel-Wert-Paaren, wobei jeder Schlüssel zu einer Variablen in der Vorlage wird.

Beispiel

Zum Erstellen einer Ansicht, in der alle Tierheime angezeigt werden, können Sie den folgenden Code verwenden:

def shelter_list(request):
    shelters = Shelter.objects.all()
    context = { 'shelters': shelters }
    return render(request, 'shelter_list.html', context)

Registrieren eines Pfads

Fast alle Webframeworks verwenden Pfade, um Benutzeranforderungen zu verarbeiten. Pfade konvertieren den Teil der URL nach dem Namen der Domäne und vor der Abfragezeichenfolge (die auf das Fragezeichen folgt) in einen Funktionsaufruf.

Ein Aufruf von www.contoso.com/shelters könnte eine Funktion aufrufen, um alle Tierheime aufzulisten, während www.contoso.com/shelters/1 eine Funktion aufrufen könnte, um ein Tierheim mit einer ID von 1 anzuzeigen. Sie registrieren Pfade in Django, indem Sie eine URLconf erstellen.

Nehmen wir an, dass wir über ein Modul namens views verfügen, das eine Django-Konvention darstellt. Wir können Indexdatenverkehr, bei dem kein Pfad angegeben ist (z. B. www.contoso.com), an eine Funktion in views namens index weiterleiten und ihr den Namen index geben, indem wir den folgenden Pfad verwenden:

path('', views.index, 'index')

Wir können auch virtuelle Ordner für bestimmte Anforderungen erstellen. Wenn wir z. B. alle Tierheime auflisten möchten, wenn jemand /shelters anfordert, könnten wir den folgenden Befehl verwenden:

path('shelters', views.shelter_list, 'shelter_list')

URL-Parameter

Es ist gängige Praxis, Parameter als Teil der URL an eine Anwendung zu übergeben, z. B. eine ID oder einen Namen. Da sich diese Werte ändern werden, wollen wir sie nicht fest in unseren Pfad codieren. In Django können Sie einen Parameter angeben, indem Sie eine spezielle Syntax verwenden. In dieser Syntax können Sie den Typ der erwarteten Daten angeben, z. B. einen Integerwert und einen Namen.

Um z. B. einen Pfad zu erstellen, über den jemand ein bestimmtes Tierheim anhand einer ID anfordert, würden wir einen Parameter vom Typ integer benötigen. (Der Grund dafür ist, dass unser Primärschlüssel ein Integerwert ist.) Wir können dann den Namen angeben, den wir für die Variable verwenden möchten, die dann als Parameter an die Ansichtsfunktion übergeben wird. Die Syntax zum Identifizieren dieses Parameters wäre <int:pk>. Beachten Sie die Typdeklaration, den Doppelpunkt und den Namen der Variablen.

Der vollständige Pfad kann wie folgt aussehen:

path('shelter/<int:pk>', views.shelter_detail, name='shelter_detail')

Die zugehörige Ansichtsfunktion hat die folgende Signatur:

def shelter_detail(request, pk):
    # code

Der pk-Teil der Pfadsignatur wird als Parameter an shelter_detail übergeben, so als ob wir sie wie eine normale Python-Funktion aufrufen würden.