Function-based views (FBV) are simpler. Class-based views (CBV) provide reuse via inheritance.
1# Function-based view2from django.http import JsonResponse34def user_list(request):5 if request.method == "GET":6 users = list(User.objects.values())7 return JsonResponse(users, safe=False)8 elif request.method == "POST":9 data = json.loads(request.body)10 user = User.objects.create(**data)11 return JsonResponse({"id": user.id}, status=201)1213# Class-based view14from django.views.generic import ListView, CreateView15from django.urls import reverse_lazy1617class UserListView(ListView):18 model = User19 template_name = "users/list.html"20 context_object_name = "users"21 paginate_by = 202223class UserCreateView(CreateView):24 model = User25 fields = ["name", "email"]26 template_name = "users/create.html"27 success_url = reverse_lazy("user-list")2829# Generic views (DRF)30from rest_framework import generics3132class UserListCreate(generics.ListCreateAPIView):33 queryset = User.objects.all()34 serializer_class = UserSerializer
When to use: