Menu
CoddyTech

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.

challenge icon

Desafio

Fácil

Transforme a página inicial em uma classe:

  • Em jobs/views.py, substitua a função home por HomeView, uma View cujo get() faz o que home fazia.
  • Em jobs/urls.py, direcione a rota "" para a classe. Mantenha name="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