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.
Wyzwanie
ŁatwyZamień stronę główną w klasę.
- W pliku
jobs/views.pyzastąp funkcjęhomeklasąHomeView, klasąView, której metodaget()robi to, co wcześniej robiła funkcjahome. - W pliku
jobs/urls.pyprzypisz trasę""do klasy. Pozostawname="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
2Generyczne widoki wyświetlania
ListViewDetailViewPoćwicz samodzielnie: Edytor online Django