What is Django REST Framework ViewSets and Routers in depth?
Answer
DRF ViewSets and Routers provide the highest level of abstraction for REST APIs: ViewSet types: ViewSet — no default actions; GenericViewSet — provides get_queryset, get_serializer; ReadOnlyModelViewSet — list + retrieve; ModelViewSet — all CRUD actions. Custom actions with @action: class ArticleViewSet(viewsets.ModelViewSet): queryset = Article.objects.all() serializer_class = ArticleSerializer @action(detail=True, methods=["post"], permission_classes=[IsAuthenticated]) def publish(self, request, pk=None): article = self.get_object() if article.author != request.user: return Response({"error": "Not your article"}, status=403) article.is_published = True article.published_at = timezone.now() article.save() return Response(ArticleSerializer(article).data) @action(detail=False, methods=["get"], url_path="trending") def trending(self, request): qs = self.get_queryset().annotate(likes=Count("like")).order_by("-likes")[:10] return Response(ArticleSerializer(qs, many=True, context={"request": request}).data) @action(detail=True, methods=["get", "post"], url_path="comments") def comments(self, request, pk=None): article = self.get_object() if request.method == "GET": comments = article.comments.filter(is_approved=True) return Response(CommentSerializer(comments, many=True).data) serializer = CommentSerializer(data=request.data) if serializer.is_valid(): serializer.save(author=request.user, article=article) return Response(serializer.data, status=201) return Response(serializer.errors, status=400). Router generates URLs: GET/POST /articles/, GET/PUT/PATCH/DELETE /articles/{pk}/, POST /articles/{pk}/publish/, GET /articles/trending/, GET/POST /articles/{pk}/comments/. Nested routers: pip install drf-nested-routers for /articles/{pk}/comments/ nested routing.
Previous
What are Django custom template tags and filters?
Next
What is Django's asynchronous views (ASGI)?
More Django Questions
View all →- Advanced What is Django's select_for_update and database locking?
- Advanced What is Django's database optimization with query analysis?
- Advanced What is Django's transaction management in depth?
- Advanced What is Django's deployment best practices?
- Advanced What is Django's caching strategies and cache invalidation?