Menu
CoddyTech

Klasa widoku

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

W tej sekcji zbudujesz 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 jedną metodę 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, a następnie request, i zwraca odpowiedź, tak jak robi to widok funkcyjny. Trasa wymaga funkcji, a .as_view() tworzy ją z klasy: path("count/", views.RecipeCountView.as_view()). Przy każdym żądaniu ta funkcja tworzy nowy obiekt klasy i wywołuje pasującą metodę.

Żądanie z metodą, której klasa nie definiuje, na przykład żądanie POST do tego widoku, otrzymuje odpowiedź 405 Method Not Allowed. Korzyść poznasz w następnej kolejności: Django zawiera klasy, które już obsługują typowe zadania.

challenge icon

Wyzwanie

Łatwy

Zamień stronę główną w klasę.

  1. 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.
  2. W pliku jobs/urls.py przypisz trasę "" do klasy. Pozostaw name="home".

Naciśnij „Uruchom”: strona główna nadal wyświetla 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