Uma classe de visualização
Parte da seção Views baseadas em classes do Journey de Django da Coddy. Lição 1 de 18.
Nesta seção, você vai criar um quadro de vagas, cuja página inicial é uma view de função, como todas as views até agora. O Django também permite escrever uma view 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(); 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 view 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()). A cada solicitação, essa função cria um novo objeto da classe e chama o método correspondente.
Um método que a classe não define, como POST neste caso, retorna 405 Method Not Allowed. A vantagem vem a seguir: o Django fornece classes que já executam as tarefas mais comuns.
Desafio
FácilTransforme a página inicial em uma classe:
- Em
jobs/views.py, substitua a funçãohomeporHomeView, umaViewcujoget()faz o quehomefazia. - Em
jobs/urls.py, direcione 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