Una classe View
Fa parte della sezione View basate su classi del percorso Django di Coddy. Lezione 1 di 18.
Questa sezione crea una bacheca di offerte di lavoro e la sua home page è una vista funzione, come tutte le viste finora. Django consente anche di scrivere una vista come classe: si crea una sottoclasse di View e si aggiunge un metodo per ogni metodo HTTP. Una richiesta GET chiama get(), una POST chiama post().
from django.views import View
class RecipeCountView(View):
def get(self, request):
total = Recipe.objects.count()
return HttpResponse(f"{total} recipes")Il metodo riceve self, poi request, e restituisce una risposta, come fa una vista funzione. Una route richiede una funzione, e .as_view() ne crea una a partire dalla classe: path("count/", views.RecipeCountView.as_view()). A ogni richiesta, quella funzione crea un nuovo oggetto della classe e chiama il metodo corrispondente.
Una richiesta con un metodo che la classe non definisce, come una POST a questa vista, riceve la risposta 405 Method Not Allowed. Il vantaggio arriva subito dopo: Django fornisce classi che svolgono già le attività più comuni.
Sfida
FacileTrasforma la home page in una classe.
- In
jobs/views.py, sostituisci la funzionehomeconHomeView, unaViewil cuiget()fa ciò che facevahome. - In
jobs/urls.py, fai puntare la route""alla classe. Mantieniname="home".
Premi «Esegui»: la home page mostra ancora 12 jobs open.
Provalo tu
from django.shortcuts import render
from .models import Job
def home(request):
count = Job.objects.count()
return render(request, "jobs/home.html", {"count": count})
Tutte le lezioni di View basate su classi
Esercitati da solo: Playground Django