How to Build RESTful APIs with Django Rest Framework

Posted by

Django Rest Framework (DRF) is a powerful and flexible toolkit for building Web APIs in Django. With its robust features, it simplifies the development of RESTful APIs. In this guide, we’ll walk through the process of setting up a Django project with DRF, creating models, serializers, and views, and finally, testing our API endpoints.

1. Setting Up the Environment

Before we start, ensure you have Python and pip installed. Then, create a virtual environment for your project:

python -m venv env
source env/bin/activate  # On Windows use `env\Scripts\activate`

Install Django and Django Rest Framework:

pip install django djangorestframework

2. Creating a Django Project

Create a new Django project and a new app within that project:

django-admin startproject myproject
cd myproject
django-admin startapp myapp

Add myapp to your INSTALLED_APPS in myproject/settings.py:


3. Setting Up Django Rest Framework

Configure Django Rest Framework in myproject/settings.py:


4. Creating Models

Define your models in myapp/models.py. For this guide, we’ll create a simple Book model:

from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=100)
    published_date = models.DateField()
    isbn = models.CharField(max_length=13, unique=True)

    def __str__(self):
        return self.title

Run the following commands to create and apply the migrations:

python manage.py makemigrations
python manage.py migrate

5. Creating Serializers

Serializers in DRF are used to convert complex data types to native Python data types. Create a new file myapp/serializers.py:

from rest_framework import serializers
from .models import Book

class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = '__all__'

6. Creating Views and ViewSets

ViewSets provide an abstraction for handling different HTTP methods. Create a new file myapp/views.py:

from rest_framework import viewsets
from .models import Book
from .serializers import BookSerializer

class BookViewSet(viewsets.ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

7. Configuring URLs

Configure the URLs for your API. Update myproject/urls.py:

from django.contrib import admin
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from myapp.views import BookViewSet

router = DefaultRouter()
router.register(r'books', BookViewSet)

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', include(router.urls)),

8. Testing the API

Run the Django development server:

python manage.py runserver

You can now test your API using a tool like Postman or directly via the browser at

Testing Endpoints:

  • GET /api/books/: Retrieve a list of all books.
  • POST /api/books/: Create a new book.
  • GET /api/books/{id}/: Retrieve a specific book by ID.
  • PUT /api/books/{id}/: Update a specific book by ID.
  • DELETE /api/books/{id}/: Delete a specific book by ID.


In this guide, we’ve covered the essentials of setting up Django Rest Framework to create RESTful APIs. We’ve gone through setting up the environment, creating a Django project, defining models, serializers, and viewsets, configuring URLs, and testing the API. With this foundation, you can expand your project to include more complex functionality and fine-tune the API to your requirements.

Leave a Reply

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