Build APIs with DRF Serializers, ModelViewSet, DefaultRouter, and permission classes.
Django REST Framework (DRF)
pip install djangorestframework
# INSTALLED_APPS += ["rest_framework"]
from rest_framework import serializers, viewsets, permissions
from rest_framework.routers import DefaultRouter
class PostSerializer(serializers.ModelSerializer):
author_name = serializers.CharField(source="author.get_full_name", read_only=True)
class Meta:
model = Post
fields = ["id","title","slug","body","author_name","created_at"]
read_only_fields = ["slug","created_at"]
class PostViewSet(viewsets.ModelViewSet):
queryset = Post.objects.select_related("author").filter(is_draft=False)
serializer_class = PostSerializer
permission_classes = [permissions.IsAuthenticatedOrReadOnly]
def perform_create(self, serializer):
serializer.save(author=self.request.user)
# Register router
router = DefaultRouter()
router.register("posts", PostViewSet)
urlpatterns = [path("api/", include(router.urls))]