REST Framework Viewsets

Web DevelopmentDjangoFree Lesson

Advertisement

Introduction

ViewSets and Routers provide a clean way to define API endpoints.

ViewSet Actions

from rest_framework import viewsets, mixins
from .models import Book
from .serializers import BookSerializer

class BookViewSet(viewsets.ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer
    # Provides: list, create, retrieve, update, partial_update, destroy

Custom Actions

class BookViewSet(viewsets.ModelViewSet):
    @action(detail=True, methods=["post"])
    def publish(self, request, pk=None):
        book = self.get_object()
        book.published = True
        book.save()
        return Response({"status": "published"})
    
    @action(detail=False)
    def recent(self, request):
        recent_books = Book.objects.order_by("-published_date")[:5]
        serializer = self.get_serializer(recent_books, many=True)
        return Response(serializer.data)

Routers

from rest_framework.routers import DefaultRouter
from .views import BookViewSet

router = DefaultRouter()
router.register(r"books", BookViewSet)

Practice Problems

  1. Create ModelViewSet
  2. Add custom actions
  3. Configure routers
  4. Implement filtering
  5. Add nested routes

Advertisement

Need Expert Python Help?

Get personalized tutoring, project support, or professional consulting.

Advertisement