0–5 min
Real Hook
5–25 min
Core Concept
25–45 min
Live Coding
45–55 min
You Code It
55–60 min
Cheat Sheet
🔥 Real-World Hook (0–5 min)

Your Django app returns HTML pages. But a React frontend, a mobile app, and a third-party dashboard all need JSON data, not HTML.

Django REST Framework turns your Django models into a full JSON API in minutes. Razorpay, Ola, and Urban Company use DRF-style APIs to power their mobile apps. Today you build an API that any frontend — web, mobile, or Postman — can talk to.

🗺 API = a waiter for data (5–25 min)

💡 REST Analogy

GET /students/ — "Give me the menu" (read all)
POST /students/ — "I want to order" (create new)
GET /students/1/ — "What's in order 1?" (read one)
PUT /students/1/ — "Change my order" (full update)
DELETE /students/1/ — "Cancel my order" (delete)

💻 Live Coding — Student REST API (25–45 min)

# Install: pip install djangorestframework
# Add 'rest_framework' to INSTALLED_APPS

# serializers.py ── converts Model ↔ JSON
from rest_framework import serializers
from .models import Student

class StudentSerializer(serializers.ModelSerializer):
    class Meta:
        model  = Student
        fields = "__all__"   # expose every field
# views.py ── ViewSet = full CRUD in one class
from rest_framework import viewsets, filters
from .models import Student
from .serializers import StudentSerializer

class StudentViewSet(viewsets.ModelViewSet):
    queryset         = Student.objects.all()
    serializer_class = StudentSerializer

    # Filtering: /api/students/?dept=CS&gpa__gte=3.5
    filter_backends  = [filters.SearchFilter, filters.OrderingFilter]
    search_fields    = ["name", "email"]
    ordering_fields  = ["gpa", "name"]
    ordering         = ["-gpa"]
# urls.py ── Router auto-generates all URLs
from rest_framework.routers import DefaultRouter
from .views import StudentViewSet

router = DefaultRouter()
router.register(r"students", StudentViewSet)

urlpatterns = router.urls
# Gives you automatically:
# GET  /students/          ← list all
# POST /students/          ← create
# GET  /students/{id}/     ← retrieve one
# PUT  /students/{id}/     ← full update
# PATCH /students/{id}/    ← partial update
# DELETE /students/{id}/   ← destroy
📋 Test your API instantly

Visit http://127.0.0.1:8000/api/students/ in your browser — DRF shows a beautiful Browsable API. No Postman needed at first. Hit "POST" to create a student, "DELETE" to remove one — right in the browser.

🎯 You Code It (45–55 min)
  1. Install DRF: pip install djangorestframework, add to INSTALLED_APPS
  2. Create ProductSerializer and ProductViewSet for your Product model from Day 7
  3. Register with Router, wire up urls.py, run server
  4. Use the Browsable API to: create 3 products, update one price, delete one product
  5. Bonus: Add search_fields = ["name"] and test ?search=laptop
  6. Show: GET /api/products/ returns JSON with your 2 remaining products

📄 Day 9 Cheat Sheet — Django REST Framework

Serializer

serializers.ModelSerializerAuto from Model
fields = "__all__"All fields
fields = ["id","name"]Specific fields
read_only_fields = ["id"]Can't be set via API
serializer.is_valid()Validate input
serializer.save()Create or update

ViewSet

viewsets.ModelViewSetFull CRUD
viewsets.ReadOnlyModelViewSetGET only
queryset = Model.objects.all()Base queryset
serializer_class = MySerializerUse this serializer
permission_classes = [IsAuthenticated]Auth required

Router URLs

GET /items/list
POST /items/create
GET /items/{id}/retrieve
PUT /items/{id}/update
PATCH /items/{id}/partial_update
DELETE /items/{id}/destroy

Filtering

filters.SearchFilter?search=term
filters.OrderingFilter?ordering=-price
django-filter package?price__gte=100
pagination_classAdd paging
get_queryset()Custom filter logic