Menu
CoddyTech

Eine View-Klasse

Teil des Abschnitts Klassenbasierte Views der Django-Journey von Coddy. Lektion 1 von 18.

In diesem Abschnitt erstellen wir eine Stellenbörse, deren Startseite wie alle bisherigen Ansichten eine funktionsbasierte Ansicht ist. Django lässt dich eine Ansicht auch als Klasse schreiben: Du leitest eine Unterklasse von View ab und fügst für jede HTTP-Methode eine Methode hinzu. Eine GET-Anfrage ruft get() auf, eine POST-Anfrage post().

from django.views import View


class RecipeCountView(View):
    def get(self, request):
        total = Recipe.objects.count()
        return HttpResponse(f"{total} recipes")

Die Methode erhält self, dann request, und gibt eine Antwort zurück, genau wie eine funktionsbasierte Ansicht. Eine Route benötigt eine Funktion, und .as_view() erstellt eine aus der Klasse: path("count/", views.RecipeCountView.as_view()). Bei jeder Anfrage erstellt diese Funktion ein neues Objekt der Klasse und ruft die passende Methode auf.

Eine Anfrage mit einer Methode, die die Klasse nicht definiert, etwa eine POST-Anfrage an diese Ansicht, erhält die Antwort 405 Method Not Allowed. Der Vorteil zeigt sich als Nächstes: Django liefert Klassen mit, die die gängigen Aufgaben bereits erledigen.

challenge icon

Aufgabe

Einfach

Verwandle die Startseite in eine Klasse.

  1. Ersetze in jobs/views.py die Funktion home durch HomeView, eine View, deren get() das tut, was home getan hat.
  2. Verweise in jobs/urls.py mit der Route "" auf die Klasse. Behalte name="home" bei.

Drücke auf „Spielen“: Auf der Startseite steht weiterhin 12 jobs open.

Probier es selbst

from django.shortcuts import render

from .models import Job


def home(request):
    count = Job.objects.count()
    return render(request, "jobs/home.html", {"count": count})

Alle Lektionen in Klassenbasierte Views

Übe selbstständig: Django-Playground