← Back to Python

All Topics

Advertisement

Learn/Python/Web Development

REST Framework Viewsets

Topic: Django

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

Advertisement

Need More Practice?

Get personalized Python help from ChatWhole's AI-powered platform.

Get Expert Help →