How to Build a REST API with Django and Django REST Framework

Creating a REST API with Django and Django REST Framework (DRF) is straightforward and powerful. In this tutorial, we’ll guide you step-by-step through the process of building your first REST API.


1. Setting Up the Environment

Install Django and DRF

  1. Create a virtual environment:
   python3 -m venv venv
   source venv/bin/activate
  1. Install Django and DRF:
   pip install django djangorestframework

2. Create a Django Project and App

Create a Project

django-admin startproject myproject
cd myproject

Create an App

python manage.py startapp myapp

Add myapp and rest_framework to the INSTALLED_APPS in settings.py:

INSTALLED_APPS = [
    ...
    'rest_framework',
    'myapp',
]

3. Create a Model

In myapp/models.py:

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)

    def __str__(self):
        return self.title

Run migrations to apply the model:

python manage.py makemigrations
python manage.py migrate

4. Create a Serializer

In myapp/serializers.py:

from rest_framework import serializers
from .models import Book

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

5. Create a View

In 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

6. Create a Router

In myapp/urls.py:

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

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

urlpatterns = [
    path('', include(router.urls)),
]

Include the app’s urls.py in the project’s urls.py:

from django.contrib import admin
from django.urls import path, include

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

7. Test the API

Run the server:

python manage.py runserver

Visit http://127.0.0.1:8000/api/books/ to interact with your API:

  • GET: Retrieve all books.
  • POST: Add a new book.
  • PUT/PATCH: Update an existing book.
  • DELETE: Delete a book.

8. Add Authentication (Optional)

You can secure your API by adding token-based authentication.

  1. Install DRF’s token authentication:
   pip install djangorestframework-simplejwt
  1. Update settings.py:
   REST_FRAMEWORK = {
       'DEFAULT_AUTHENTICATION_CLASSES': (
           'rest_framework_simplejwt.authentication.JWTAuthentication',
       ),
   }
  1. Add authentication endpoints in urls.py:
   from rest_framework_simplejwt.views import (
       TokenObtainPairView,
       TokenRefreshView,
   )

   urlpatterns += [
       path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
       path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
   ]

9. Explore the API

You can use tools like Postman, Insomnia, or the DRF Browsable API for testing and interacting with your API.


Congratulations! You now have a fully functional REST API built with Django and Django REST Framework. This setup is simple yet flexible enough for most applications. Happy coding!

My Thought

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

Our Tool : hike percentage calculator