Django

Class-Based Views

ListView, DetailView, and generic editing views

Class-Based Views

CBVs reduce boilerplate for standard list/detail/create flows.

from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import ListView, DetailView, CreateView, UpdateView
from django.urls import reverse_lazy
from .models import Task

class TaskListView(LoginRequiredMixin, ListView):
    model = Task
    template_name = "tasks/task_list.html"
    context_object_name = "tasks"

    def get_queryset(self):
        return Task.objects.filter(
            project__owner=self.request.user
        ).select_related("project")

class TaskCreateView(LoginRequiredMixin, CreateView):
    model = Task
    fields = ["project", "title", "priority", "due_date"]
    template_name = "tasks/task_form.html"
    success_url = reverse_lazy("tasks:task-list")
# urls.py
from django.urls import path
from .views import TaskListView, TaskCreateView

urlpatterns = [
    path("", TaskListView.as_view(), name="task-list"),
    path("new/", TaskCreateView.as_view(), name="task-create"),
]