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.
Wyzwanie
ŁatwyPrzekształć 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 tej klasy. Zachowajname="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
2Generyczne widoki wyświetlania
ListViewDetailViewPoćwicz samodzielnie: Edytor online Django