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 fromrest_framework.response
.