Menu
CoddyTech

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.

challenge icon

Sfida

Facile

Trasforma la pagina iniziale in una classe:

  • In jobs/views.py, sostituisci la funzione home con HomeView, una View il cui get() fa ciò che faceva home.
  • In jobs/urls.py, associa la route "" alla classe. Mantieni name="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