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 permet de créer un site d’offres d’emploi, dont la page d’accueil est une vue fonctionnelle comme toutes les vues jusqu’ici. Django vous permet aussi d’écrire une vue sous forme de classe : vous héritez de View et ajoutez une méthode pour chaque 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 reçoit self, puis request, et renvoie une réponse, comme le fait une vue fonctionnelle. 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.

Si la classe ne définit pas une méthode, comme POST ici, Django renvoie 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 :

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

Appuie sur Run : la page d’accueil indique 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