Menu
CoddyTech

Une classe View

Fait partie de la section Vues basées sur des classes du Journey Django de Coddy. Leçon 1 sur 18.

Cette section construit un site d’offres d’emploi, dont la page d’accueil est une vue fonction, comme toutes les vues jusqu’ici. Django vous permet aussi d’écrire une vue sous forme de classe : vous créez une sous-classe de View et ajoutez une méthode par méthode HTTP. Une requête GET appelle get(), une requête POST appelle post().

from django.views import View


class RecipeCountView(View):
    def get(self, request):
        total = Recipe.objects.count()
        return HttpResponse(f"{total} recipes")

La méthode prend self, puis request, et renvoie une réponse, comme le fait une vue fonction. Une route a besoin d’une fonction, et .as_view() en crée une à partir de la classe : path("count/", views.RecipeCountView.as_view()). À chaque requête, cette fonction crée un nouvel objet de la classe et appelle la méthode correspondante.

Une requête dont la méthode n’est pas définie par la classe, comme une requête POST adressée à cette vue, reçoit la réponse 405 Method Not Allowed. L’avantage se révèle ensuite : Django fournit des classes qui prennent déjà en charge les tâches courantes.

challenge icon

Défi

Facile

Transforme la page d’accueil en classe.

  1. Dans jobs/views.py, remplace la fonction home par HomeView, une View dont get() fait ce que faisait home.
  2. Dans jobs/urls.py, associe la route "" à la classe. Conserve name="home".

Appuie sur « Jouer » : la page d’accueil affiche toujours 12 jobs open.

Essayez vous-même

from django.shortcuts import render

from .models import Job


def home(request):
    count = Job.objects.count()
    return render(request, "jobs/home.html", {"count": count})

Toutes les leçons de Vues basées sur des classes

Entraînez-vous par vous-même : Playground Django