Skip to content
Django
11. Django Files Cheatsheet
Django REST API

Django REST framework - API

Django REST Framework is introduced as a Python library for building APIs. The API can be accessed via a web browser or API client tools.

1. Installation

The Django REST Framework package is installed using pip.

pip install djangorestframework
pip install markdown       # Markdown support for the browsable API.
pip install django-filter  # Filtering support

The Django REST Framework is added to the installed apps in the settings.py file. `

INSTALLED_APPS = [
    # ...
    # Third party apps
    'rest_framework',
]

Project directory structure:

myproject/
├── api/
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── models.py
│   ├── serializers.py
│   ├── tests.py
│   ├── urls.py
│   └── views.py
├── myproject/
│   ├── __init__.py
│   ├── asgi.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── manage.py
  • An __init__.py file is added to this folder to make it a Python package.

2. Model

models.py
from django.db import models
 
class Item(models.Model):
    name = models.CharField(max_length=200)
    created = models.DateTimeField(auto_now_add=True)
 
    def __str__(self):
        return self.name
 

3. Serializers

serializers.py
from rest_framework import serializers
from .models import Item
 
class ItemSerializer(serializers.ModelSerializer):
    class Meta:
        model = Item
        fields = '__all__'

4. API URLs

urls.py
from django.urls import path
from . import views
 
urlpatterns = [
    path('', views.getData, name='api-data'),
    path('add/', views.addData, name='api-add'),
]

5. API Views

views.py
from rest_framework.response import Response
from rest_framework.decorators import api_view  # for function based views
from base.models import Item
from .serializers import ItemSerializer
 
 
# Sample API View -  Dummy Data
@api_view(['GET'])
def sample_api(request):
    data = {
        'name': 'John',
        'age': 30
    }
    return Response(data)
 
# Get data with api
@api_view(['GET'])
def getData(request):
    items = Item.objects.all()
    serializer = ItemSerializer(items, many=True) # many=True for multiple objects
    return Response(serializer.data) # returns a json response
 
# Add data with api
@api_view(['POST'])
def addData(request):
    serializer = ItemSerializer(data=request.data)
    if serializer.is_valid():
        serializer.save()
        return Response(serializer.data, status=201)
    return Response(serializer.errors, status=400)
 
  • The api_view decorator is used to specify the HTTP methods allowed (e.g., GET).
  • Dummy data is returned as a JSON response using the Response class from rest_framework.response.