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.
Défi
FacileTransforme la page d’accueil en classe :
- Dans
jobs/views.py, remplace la fonctionhomeparHomeView, uneViewdont la méthodeget()fait ce que faisaithome. - Dans
jobs/urls.py, associe la route""à la classe. Conservename="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