Building a Basic Django REST API
O
Ohidur Rahman Bappy
MAR 22, 2025
Building a Basic Django REST API
Overview
Creating a REST API in Django involves a series of key steps to enable CRUD operations using HTTP requests.
Key HTTP Methods
- GET — Retrieve data from the API.
- POST — Create a new record.
- PUT — Update a record if it exists or create a new one.
- DELETE — Remove a record.
- PATCH — Update specific fields of a record.
Setting Up Django and Django REST Framework
Install Django
pip install django
Install Django REST Framework
pip install djangorestframework
Creating Your Project and App
Create a New Project
django-admin startproject mysite
Create a New App
cd mysite
python manage.py startapp TodoList
Update Installed Apps in settings.py
INSTALLED_APPS = [
'TodoList.apps.TodolistConfig',
'rest_framework',
...
]
Apply Migrations
python manage.py migrate
Create a Superuser Account
python manage.py createsuperuser
Defining Models
Add Models for Todo List
from django.db import models
class Group(models.Model):
title = models.CharField(max_length=200)
def __str__(self) -> str:
return self.title
class Item(models.Model):
title = models.CharField(max_length=200)
description = models.TextField(default='')
date = models.DateTimeField()
completed = models.BooleanField(default=False)
todo_list = models.ForeignKey(Group, on_delete=models.CASCADE, related_name='items')
def __str__(self) -> str:
return self.title
Register Models in Admin Site
from .models import Group, Item
admin.site.index_title = "Todo Admin"
admin.site.site_title = "Todo Admin"
admin.site.site_header = 'Welcome to Todo Admin'
class ItemInline(admin.TabularInline):
model = Item
extra = 1
class GroupAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['title']}),
]
inlines = [ItemInline]
admin.site.register(Group, GroupAdmin)
Make Migrations and Migrate
python manage.py makemigrations
python manage.py migrate
Creating Serializers
Serialize Models
from rest_framework import serializers
from .models import Group, Item
class ItemSerializer(serializers.ModelSerializer):
class Meta:
model = Item
fields = ('id', 'title', 'date', 'completed')
class GroupSerializer(serializers.HyperlinkedModelSerializer):
items = ItemSerializer(many=True, read_only=True)
class Meta:
model = Group
fields = ('id', 'title', 'items')
Setting Up Views
Create ViewSets
from rest_framework import viewsets
from .models import Group, Item
from .serializers import GroupSerializer
class GroupViewSets(viewsets.ModelViewSet):
queryset = Group.objects.all().order_by('id')
serializer_class = GroupSerializer
Configuring URLs
Add URLs in App
from django.urls import path, include
from rest_framework import routers
from . import views
router = routers.DefaultRouter()
router.register(r'groups', views.GroupViewSets)
urlpatterns = [
path('', include(router.urls)),
path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
Include App URLs in Main urls.py
urlpatterns = [
...
path('', include('TodoList.urls')),
]