Create a django-project
# Install django and rest_framework
pip install django
pip install djangorestframework
django-admin startprorject token_auth
Create a django application
# Create an app
python manage.py startapp myapi
Mention in setting.py
# Mention apps in setting.py
INSTALLED_APPS = [
'.....',
'.....',
'rest_framework',
'rest_framework.authtoken',
'myapi,
]
Set Token Authentication Globally (for all views)
# Set globally TokenAuthentication in - setting.py
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication',
'rest_framework.authentication.BasicAuthentication', # Optional
]
}
Create a Model
# Create a model - models.py
from django.db import models
from django.contrib.auth.models import User
class Blog(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=150)
description = models.TextField()
Register Model in admin
# Register model in the admin panel - admin.py
from django.contrib import admin
from .models import Blog
@admin.register(Blog)
class BlogAdmin(admin.ModelAdmin):
list_display = ['title', 'user', 'description','id']
Execute these commands to save changes
# Create Tables in the database
python manage.py makemigrations
python manage.py migrate
# Create superuser
python manage.py createsuperuser
# Add some entries manually
Create another file for serializers - (say serializers.py)
# Serializer class for model - serializer.py
from rest_framework import serializers
from .models import Blog
class BlogSerializer(serializers.ModelSerializer):
class Meta:
model = Blog
fields = "__all__"
Add Url router and register
# Main Project urls.py
from django.contrib import admin
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from rest_framework.authtoken.views import obtain_auth_token
from . import views
router = DefaultRouter()
router.register(r'blogs', views.BlogModelViewSet, basename='blogs')
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include(router.urls)), # add router
path('auth/', include('rest_framework.urls', namespace='rest_framework')),
# Add url for User to Get Token
path('gettoken/', obtain_auth_token),
]
Create view.py
# views.py
from rest_framework import viewsets
from blog.models import Blog
from .serializers import BlogSerializer
class BlogModelViewSet(viewsets.ModelViewSet):
serializer_class = BlogSerializer
queryset = Blog.objects.all()
How to generate API key or Token using Curl
curl -i -X POST 127.0.0.1:8000/gettoken/ -d "username=admin&password=admin"
# Output
HTTP/1.1 200 OK
Date: Tue, 11 Apr 2023 15:34:55 GMT
Server: WSGIServer/0.2 CPython/3.10.6
Content-Type: application/json
Allow: POST, OPTIONS
X-Frame-Options: DENY
Content-Length: 52
Vary: Origin, Cookie
X-Content-Type-Options: nosniff
Referrer-Policy: same-origin
Cross-Origin-Opener-Policy: same-origin
{"token":"08bc55c895810ea53525f5a3c24736941eee052a"} # Copy this token
Get request using curl
curl -i -X GET localhost:8000/api/blogs/ -H "Authorization: Token 08bc55c895810ea53525f5a3c24736941eee052a"
# Output
[{"id":1,"title":"What is HTML?","description":"HTML stands for Hypertext Markup Language. It is used to design web pages. It is used to make the structure of the website.","user":1},{"id":2,"title":"Wha is django?","description":"Django is web framework, which is written in python. It is used to make website backend. Youtube is also made in django.","user":1},{"id":3,"title":"What is CSS?","description":"CSS stands for Cascading Style Sheet. CSS is used for Styling the web pages.","user":1},{"id":13,"title":"What is JavaScript?","description":"JavaScript is a client side programming language. Although today it has become the general purpose language.","user":2},{"id":14,"title":"What is Java?","description":"Java is a high level, object oriented, platform independent programming language.","user":1}]
Post request using curl
curl -i -X POST localhost:8000/api/blogs/ -H "Authorization: Token 08bc55c895810ea53525f5a3c24736941eee052a" -d "title=What is Python?&description=Python is high level general purpose language used in AI and ML&user=1"
# Output
HTTP/1.1 201 Created
Date: Tue, 11 Apr 2023 15:47:26 GMT
Server: WSGIServer/0.2 CPython/3.10.6
Content-Type: application/json
Vary: Accept, Origin, Cookie
Allow: GET, POST, HEAD, OPTIONS
X-Frame-Options: DENY
Content-Length: 126
X-Content-Type-Options: nosniff
Referrer-Policy: same-origin
Cross-Origin-Opener-Policy: same-origin
{"id":15,"title":"What is Python 3?","description":"Python is high level general purpose language used in AI and ML","user":1}
Comments
Post a Comment