Menu
CoddyTech

Una clase de vista

Parte de la sección Vistas basadas en clases del Journey de Django de Coddy. Lección 1 de 18.

En esta sección se crea un tablón de ofertas de empleo, y su página de inicio es una vista basada en una función, como todas las vistas hasta ahora. Django también permite escribir una vista como una clase: se crea una subclase de View y se añade un método por cada método HTTP. Una solicitud GET llama a get(), y una solicitud POST llama a post().

from django.views import View


class RecipeCountView(View):
    def get(self, request):
        total = Recipe.objects.count()
        return HttpResponse(f"{total} recipes")

El método recibe self, después request, y devuelve una respuesta, igual que una vista basada en una función. Una ruta necesita una función, y .as_view() crea una a partir de la clase: path("count/", views.RecipeCountView.as_view()). En cada solicitud, esa función crea un nuevo objeto de la clase y llama al método correspondiente.

Un método que la clase no define, como POST en este caso, devuelve 405 Method Not Allowed. La ventaja llega a continuación: Django incluye clases que ya realizan las tareas más comunes.

challenge icon

Desafío

Fácil

Convierte la página de inicio en una clase:

  • En jobs/views.py, reemplaza la función home por HomeView, una View cuyo método get() hace lo mismo que hacía home.
  • En jobs/urls.py, apunta la ruta "" a la clase. Conserva name="home".

Pulsa Run: la página de inicio sigue diciendo 12 jobs open.

Pruébalo tú mismo

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 las lecciones de Vistas basadas en clases

Practica por tu cuenta: Playground de Django