ViewSets and routers help you write less code to handle common web actions like showing, adding, or changing data.
ViewSets and routers in Django
from rest_framework import viewsets from rest_framework.routers import DefaultRouter class MyModelViewSet(viewsets.ModelViewSet): queryset = MyModel.objects.all() serializer_class = MyModelSerializer router = DefaultRouter() router.register(r'mymodels', MyModelViewSet) urlpatterns = router.urls
ViewSet: A class that groups common actions like list, create, update, delete.
Router: Automatically creates URL patterns for the ViewSet actions.
class BookViewSet(viewsets.ModelViewSet):
queryset = Book.objects.all()
serializer_class = BookSerializerrouter = DefaultRouter()
router.register(r'books', BookViewSet)
urlpatterns = router.urlsclass ReadOnlyBookViewSet(viewsets.ReadOnlyModelViewSet):
queryset = Book.objects.all()
serializer_class = BookSerializerThis example shows a full setup for a simple API to manage fruits. You can list all fruits, add new ones, update, or delete them using the URLs created automatically.
from django.urls import path, include from rest_framework import viewsets from rest_framework.routers import DefaultRouter from rest_framework.serializers import ModelSerializer from django.db import models # Simple model class Fruit(models.Model): name = models.CharField(max_length=100) # Serializer for Fruit class FruitSerializer(ModelSerializer): class Meta: model = Fruit fields = ['id', 'name'] # ViewSet for Fruit class FruitViewSet(viewsets.ModelViewSet): queryset = Fruit.objects.all() serializer_class = FruitSerializer # Router setup router = DefaultRouter() router.register(r'fruits', FruitViewSet) # URL patterns urlpatterns = [ path('', include(router.urls)), ] # Explanation: # This code creates a Fruit model, serializer, and a ViewSet that handles all actions. # The router automatically creates URLs like /fruits/ and /fruits/{id}/ for listing and detail.
Routers save time by creating URLs for you, so you don't write them manually.
ViewSets group related actions, making your code cleaner and easier to read.
You can customize which actions are allowed by choosing different ViewSet classes.
ViewSets group common web actions like list, create, update, and delete.
Routers automatically create URLs for these actions, saving you from writing URL code.
This combination helps you build clean and simple APIs quickly.