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.

Esta sección crea un tablón de ofertas de empleo, y su página de inicio es una vista de función, como todas las vistas hasta ahora. Django también te permite escribir una vista como una clase: creas una subclase de View y añades 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 de 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.

Una solicitud cuyo método no esté definido por la clase, como una solicitud POST a esta vista, recibe la respuesta 405 Method Not Allowed. La ventaja viene 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.

  1. En jobs/views.py, reemplaza la función home por HomeView, una View cuyo get() haga lo que hacía home.
  2. En jobs/urls.py, apunta la ruta "" a la clase. Mantén name="home".

Pulsa «Ejecutar»: 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