Django Rest API – From Scratch – Part 1

Let’s create a todo app quickly

django rest framework logo

Project Setup

Create a directory where all your project files and environment exist.

mkdir django-rest
cd django-rest

You shouldn’t install any python module globally because every project has different dependencies. The dependencies should be installed in the scope of a project. Therefore, you should create a virtual environment and activate it as following.

python -m venv env
source env/Scripts/activate

For windows


Install django and djangorestframework

pip install django djangorestframework

Inside the current folder, you should create a django project. A django project is like a container to different web apps inside it. So, we have to create at least a web app.

django-admin startproject tutorial
cd tutorial
python startapp todo

Django creates an initial migration about authentication during the process of project creation. Migration is done for Object Relational Mapping (ORM), i.e. we map our classes to the structure of database. Hence, migrate the initial migration created.

python migrate

Django provides a powerful authentication, authorization mechanism. Not only that, it provides a robust admin panel for CRUD operation. Therefore, you can utilize the feature and create a superuser.

python createsuperuser

Here, I have created a superuser with username and password as nepcodex


Create new python module tutorial/todo/ and paste the following lines of code

from django.contrib.auth.models import User, Group
from rest_framework import serializers

class UserSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = User
        fields = ['url', 'username', 'email', 'groups']

class GroupSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Group
        fields = ['url', 'name']


Now, we have to write some views. You should understand that views in django is different from views in other frameworks. Having said so, django offers controlling in views and views in template. So, open tutorial/todo/ and paste the following lines of code.

from django.contrib.auth.models import User, Group
from rest_framework import viewsets
from .serializers import UserSerializer, GroupSerializer

class UserViewSet(viewsets.ModelViewSet):
    API endpoint that allows users to be viewed or edited.
    queryset = User.objects.all().order_by('-date_joined')
    serializer_class = UserSerializer

class GroupViewSet(viewsets.ModelViewSet):
    API endpoint that allows groups to be viewed or edited.
    queryset = Group.objects.all()
    serializer_class = GroupSerializer


We have to wire up our API using automatic url routing. So, tet’s start mapping URLS. Open tutorial/tutorial/ and add some codes.

from django.urls import include, path
from rest_framework import routers
from todo import views

router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)
router.register(r'groups', views.GroupViewSet)

# Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browsable API.
urlpatterns = [
    path('', include(router.urls)),
    path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))


Showing all the results in a single page is resource consuming and a slower process. Hence, you must limit the number of results to show when a request for the resource is opened. Therefore, open tutorial/tutorial/ and add follwing lines of code

    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 10


Finally, you have to register your app. This can be done in the beginning, if you want. So, open tutorial/tutorial/ and register rest_framework as



Browse the url to check the API. You can see the list of urls in json format. You can browse those urls from your browser. Also, you can use API endpoints testing tools like Postman as well.


We can conclude total work done in following points:

  1. Created a directory django-rest where all our environment and project resides
  2. Created a virtual environment env and activated it
  3. Installed required python packages django and djangorestframework
  4. Started a new django project named tutorial and inside it created an app todo
  5. Migrated the initial migrations to database
  6. Created a superuser
  7. Added a new module named to serialize data in json format needed for the API
  8. Created viewsets inside that are needed to view the data as a set
  9. Wired up our API using automatic url routing
  10. Limited the number results using pagination in file
  11. Registered the rest_framework in
  12. Tested the endpoints in browser or Postman.

If your app didn’t run successfully, then you can review the above points. You can start from the beginning and identify what might be missing.

If you already have successfully completed up to here, then let’s move into part 2 from here:

Get Postman here:

0 0 votes
Article Rating
Notify of
Newest Most Voted
Inline Feedbacks
View all comments