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