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.

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.

challenge icon

Desafio

Fácil

Transforme a página inicial em uma classe.

  1. Em jobs/views.py, substitua a função home por HomeView, uma View cujo método get() faz o que home fazia.
  2. Em jobs/urls.py, aponte 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