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 lavoro e la sua pagina iniziale è una vista funzione, come tutte le viste viste finora. Django permette 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 accetta 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.
Un metodo che la classe non definisce, come POST in questo caso, restituisce 405 Method Not Allowed. Il vantaggio arriva subito dopo: Django fornisce classi che svolgono già le operazioni più comuni.
Sfida
FacileTrasforma la pagina iniziale in una classe:
- In
jobs/views.py, sostituisci la funzionehomeconHomeView, unaViewil cuiget()fa ciò che facevahome. - In
jobs/urls.py, associa la route""alla classe. Mantieniname="home".
Premi Run: la pagina iniziale dice 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