Django Lesson 8: Django REST Framework

🐍 Django CourseLesson 8 of 10 · 80% complete

Django REST Framework (DRF) turns your Django app into a powerful API. Used by Instagram, Mozilla, Red Hat, and thousands more.

pip install djangorestframework

# settings.py
INSTALLED_APPS = [
    ...
    "rest_framework",
]

Serializers + ViewSets

# posts/serializers.py
from rest_framework import serializers
from .models import Post

class PostSerializer(serializers.ModelSerializer):
    author_name = serializers.CharField(source="author.username", read_only=True)
    
    class Meta:
        model = Post
        fields = ["id", "title", "content", "status", "author_name", "created_at"]
        read_only_fields = ["id", "created_at", "author_name"]

# posts/views.py
from rest_framework import viewsets, permissions
from .serializers import PostSerializer

class PostViewSet(viewsets.ModelViewSet):
    queryset = Post.objects.filter(status="published")
    serializer_class = PostSerializer
    permission_classes = [permissions.IsAuthenticatedOrReadOnly]
    
    def perform_create(self, serializer):
        serializer.save(author=self.request.user)

# posts/urls.py
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register("posts", PostViewSet)
urlpatterns = router.urls
# Generates: GET/POST /posts/, GET/PUT/DELETE /posts/{id}/

🏋️ Practice Task

Convert your task manager to a DRF API. Create TaskSerializer, ProjectSerializer. Use ModelViewSet for both. Add custom action: POST /tasks/{id}/toggle/ that flips the done status. Visit /api/ for the browsable API.

💡 Hint: @action(detail=True, methods=[“post”]) def toggle(self, request, pk=None): task = self.get_object(); task.done = not task.done; task.save()

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *