Django

Django Views

Function-based views and request handling

Django Views — TaskBoard dashboard

Where we are: Project exists; next we list tasks on a dashboard view.

Function-based view (FBV)

# tasks/views.py
from django.shortcuts import render
from .models import Task

def task_list(request):
    tasks = Task.objects.filter(is_done=False).select_related("project")
    return render(request, "tasks/task_list.html", {"tasks": tasks})

get_object_or_404 (production habit)

from django.shortcuts import get_object_or_404

def task_detail(request, pk):
    task = get_object_or_404(Task, pk=pk)
    return render(request, "tasks/task_detail.html", {"task": task})

POST handling and messages

from django.contrib import messages
from django.shortcuts import redirect

def task_toggle_done(request, pk):
    if request.method != "POST":
        return redirect("tasks:task-list")
    task = get_object_or_404(Task, pk=pk)
    task.is_done = not task.is_done
    task.save(update_fields=["is_done"])
    messages.success(request, f"Updated: {task.title}")
    return redirect("tasks:task-list")

Avoid: Task.objects.get(pk=pk) in user-facing views—uncaught DoesNotExist becomes a 500 error. Use get_object_or_404.