Open In App

Implement Token Authentication using Django REST Framework

Improve
Improve
Like Article
Like
Save
Share
Report

Token authentication refers to exchanging username and password for a token that will be used in all subsequent requests so to identify the user on the server side.This article revolves about implementing token authentication using Django REST Framework to make an API. The token authentication works by providing token in exchange for exchanging usernames and passwords.
 

Modules required :

  • django : 
pip install django
  • crispy_forms : 
 pip install --upgrade django-crispy-forms 
  • django rest_framework : 
pip install djangorestframework
  • HTTPie : 
pip install httpie

and a project to add API, here we are using Sign Up and log in
 

Creating Viewset and Serializers

Go to user folder in given project 
and make a api folder to keep all api related files  

 cd user && mkdir api 

Now, make user/api/serializers.py and user/api/viewsets.py in api folder

 cd user/api && touch serializers.py viewsets.py 

now edit user/api/serializers.py 

Python3




from rest_framework import serializers
from django.contrib.auth.models import User
 
 
class userSerializers(serializers.ModelSerializer):
 
    class Meta:
        model = User
        fields =  '__all__'


also edit user/api/viewsets.py 

Python3




from rest_framework import viewsets
from .serializers import userSerializers
from django.contrib.auth.models import User
 
 
class userviewsets(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = userSerializers


Edit settings.py
add rest_framework and rest_framework.authtoken in INSTALLED_APPS in setting.py

Edit rest_framework settings as below 

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
               'rest_framework.authentication.TokenAuthentication',
    ),
    'DEFAULT_PERMISSION_CLASSES':(
                'rest_framework.permissions.IsAuthenticated',
    ),

}

Creating router 
goto project/ and create router.py 

 cd project/ && touch router.py 

edit project/router.py

Python3




from user.api.viewsets import userviewsets
from rest_framework import routers
 
router = routers.DefaultRouter()
router.register('user', userviewsets, base_name ='user_api')


Editing url.py
goto to project/urls.py
and edit it 
Import router and rest_framework.authtoken for token authentication 

Python3




from .router import router
from rest_framework.authtoken import views


add API related paths
 

Python3




path('api/', include(router.urls)),
path('api-token-auth/', views.obtain_auth_token, name='api-token-auth'),



Testing API 
first, migrate models  

python manage.py migrate 

start server using below command  

python manage.py runserver

open another terminal and let us check our API using HTTP POST request for a token and paste username and password. 

http POST http://localhost:8081/api-token-auth/ username='your_username' password="your_password"

now use this token to get data from API, place your API token 

http http://localhost:8081/api/user/ "Authorization: Token API_KEY_HERE"



Last Updated : 19 Nov, 2021
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads