Uma classe de visualização
Parte da seção Views baseadas em classes do Journey de Django da Coddy. Lição 1 de 18.
Esta seção cria um mural de vagas, e sua página inicial é uma visão de função, como todas as visões até agora. Django também permite escrever uma visão como uma classe: você cria uma subclasse de View e adiciona um método para cada método HTTP. Uma solicitação GET chama get(), e uma solicitação POST chama post().
from django.views import View
class RecipeCountView(View):
def get(self, request):
total = Recipe.objects.count()
return HttpResponse(f"{total} recipes")O método recebe self, depois request, e retorna uma resposta, assim como uma visão de função. Uma rota precisa de uma função, e .as_view() cria uma a partir da classe: path("count/", views.RecipeCountView.as_view()). Em cada solicitação, essa função cria um novo objeto da classe e chama o método correspondente.
Uma solicitação cujo método não é definido pela classe, como uma solicitação POST para essa visão, recebe a resposta 405 Método Não Permitido. A vantagem vem a seguir: o Django oferece classes que já realizam as tarefas comuns.
Desafio
FácilTransforme a página inicial em uma classe.
- Em
jobs/views.py, substitua a funçãohomeporHomeView, umaViewcujo métodoget()faz o quehomefazia. - Em
jobs/urls.py, aponte a rota""para a classe. Mantenhaname="home".
Pressione Run: a página inicial ainda diz 12 jobs open.
Experimente você mesmo
from django.shortcuts import render
from .models import Job
def home(request):
count = Job.objects.count()
return render(request, "jobs/home.html", {"count": count})
Todas as lições de Views baseadas em classes
Pratique por conta própria: Playground de Django