Menu
CoddyTech

Klasa widoku

Część sekcji Widoki oparte na klasach ścieżki Django w Coddy. Lekcja 1 z 18.

W tej sekcji tworzysz tablicę ogłoszeń o pracę, a jej strona główna jest widokiem funkcyjnym, tak jak wszystkie dotychczasowe widoki. Django pozwala też zapisać widok jako klasę: dziedziczysz po View i dodajesz po jednej metodzie dla każdej metody HTTP. Żądanie GET wywołuje get(), a żądanie POST — post().

from django.views import View


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

Metoda przyjmuje self, potem request i zwraca odpowiedź, tak jak robi to widok funkcyjny. Trasa wymaga funkcji, a .as_view() tworzy ją na podstawie klasy: path("count/", views.RecipeCountView.as_view()). Przy każdym żądaniu ta funkcja tworzy nowy obiekt klasy i wywołuje pasującą metodę.

Metoda, której klasa nie definiuje, jak tutaj POST, powoduje zwrócenie odpowiedzi 405 Method Not Allowed. A oto najważniejsza zaleta: Django udostępnia gotowe klasy, które realizują typowe zadania.

challenge icon

Wyzwanie

Łatwy

Przekształć stronę główną w klasę:

  • W pliku jobs/views.py zastąp funkcję home klasą HomeView — klasą View, której metoda get() robi to, co wcześniej robiła funkcja home.
  • W pliku jobs/urls.py przypisz trasę "" do tej klasy. Zachowaj name="home".

Naciśnij Run: na stronie głównej nadal widnieje tekst 12 jobs open.

Spróbuj swoich sił

from django.shortcuts import render

from .models import Job


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

Wszystkie lekcje w sekcji Widoki oparte na klasach

Poćwicz samodzielnie: Edytor online Django