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