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 Jobbörse, und ihre Startseite ist wie alle bisherigen Ansichten eine Funktionsansicht. Mit Django kannst du 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 nimmt self und dann request entgegen und gibt eine Antwort zurück, genau wie eine Funktionsansicht. 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 Methode, die die Klasse nicht definiert, wie hier POST, führt zu 405 Method Not Allowed. Der eigentliche Vorteil zeigt sich als Nächstes: Django liefert Klassen mit, die die gängigen Aufgaben bereits erledigen.

challenge icon

Aufgabe

Einfach

Wandle die Startseite in eine Klasse um:

  • Ersetze in jobs/views.py die Funktion home durch HomeView, eine View, deren get() dasselbe tut wie home.
  • Verweise in jobs/urls.py mit der Route "" auf die Klasse. Behalte name="home" bei.

Klicke auf „Run“: 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