Labs ICT
โญ Pro Login

REST APIs

Building APIs with Django REST Framework.

Introduction to DRF

Django REST Framework (DRF) makes it easy to build Web APIs. It provides serializers, viewsets, and routers for quick API development.


from rest_framework import serializers
from .models import Article

class ArticleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Article
        fields = ['id', 'title', 'content', 'author', 'created_at']
    

Serializers convert complex data types like querysets to JSON. They handle validation and data transformation.

ViewSets and Routers

ViewSets combine related views into a single class. Routers automatically generate URL patterns.


from rest_framework import viewsets
from rest_framework.routers import DefaultRouter
from .models import Article
from .serializers import ArticleSerializer

class ArticleViewSet(viewsets.ModelViewSet):
    queryset = Article.objects.all()
    serializer_class = ArticleSerializer

router = DefaultRouter()
router.register(r'articles', ArticleViewSet)
    

ModelViewSet provides list, create, retrieve, update, and destroy actions out of the box. Include the router URLs in your URLconf.

Using APIView

For more control, use APIView to write function-based or class-based views.


from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status

class ArticleList(APIView):
    def get(self, request):
        articles = Article.objects.all()
        serializer = ArticleSerializer(articles, many=True)
        return Response(serializer.data)

    def post(self, request):
        serializer = ArticleSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
    

APIView gives you full control over request handling and response formatting.

Try it Yourself โ†’

Authentication and Permissions

DRF provides authentication classes and permission classes to secure your API.


from rest_framework.permissions import IsAuthenticated, IsAdminUser

class ArticleViewSet(viewsets.ModelViewSet):
    queryset = Article.objects.all()
    serializer_class = ArticleSerializer
    permission_classes = [IsAuthenticated]
    

Common permissions include IsAuthenticated, IsAdminUser, and AllowAny. You can combine multiple permissions with & or |.

Pagination and Filtering

DRF includes built-in pagination and filtering support.


REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 20,
    'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend'],
}
    

Pagination breaks results into pages. Filtering lets users narrow down results with query parameters.

๐Ÿงช Quick Quiz

What is a Django serializer?