Django REST Framework
Serializers, ViewSets, Routers — full CRUD JSON API for any model in minutes.
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)
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
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.
- Install DRF:
pip install djangorestframework, add toINSTALLED_APPS - Create
ProductSerializerandProductViewSetfor your Product model from Day 7 - Register with Router, wire up
urls.py, run server - Use the Browsable API to: create 3 products, update one price, delete one product
- Bonus: Add
search_fields = ["name"]and test?search=laptop - Show:
GET /api/products/returns JSON with your 2 remaining products
📄 Day 9 Cheat Sheet — Django REST Framework
Serializer
| serializers.ModelSerializer | Auto 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.ModelViewSet | Full CRUD |
| viewsets.ReadOnlyModelViewSet | GET only |
| queryset = Model.objects.all() | Base queryset |
| serializer_class = MySerializer | Use 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_class | Add paging |
| get_queryset() | Custom filter logic |