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.
Desafío
FácilConvierte la página de inicio en una clase:
- En
jobs/views.py, reemplaza la funciónhomeporHomeView, unaViewcuyo métodoget()hace lo mismo que hacíahome. - En
jobs/urls.py, apunta la ruta""a la clase. Conservaname="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