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')),
]