Skip to content

Princekrampah/djangoCRUDAPI

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 

Repository files navigation

Django Rest Framework CRUD API

  1. Django Installation
pip install Django==3.2.7
  1. Django Rest Framework Installation
pip install djangorestframework
  1. Start Django Project
django-admin startproject CRUDAPI
cd CRUDAPI
python manage.py startapp todoList
  1. Registet TodoList app
INSTALLED_APPS = [
    'todoList.apps.TodolistConfig',
]
  1. Register Django Rest Framework
INSTALLED_APPS = [
    'rest_framework',
]
  1. Models
python manage.py migrate
  1. Start out application
python manage.py runserver
  1. Create superuser
python manage.py createsuperuser
  1. Run application again
python manage.py runserver
  1. Include URL for our app
urlpatterns = [
    path('admin/', admin.site.urls),
    path("", include("todoList.urls"))
]
  1. Update the url file
from django.urls import path
from .views import index

urlpatterns = [
    path("", index, name = "index")
]
  1. User registration Serializer
class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('username', 'password', 'email')
        extra_kwargs = {'password': {'write_only': True}}

    def create(self, validated_data):
        password = validated_data.pop('password')
        user = User(**validated_data)
        user.set_password(password)
        user.save()
        return user

in views.py add the following

from .serializers import UserSerializer
from rest_framework import generics
from django.contrib.auth.models import User
from rest_framework.permissions import AllowAny

class UserCreate(generics.CreateAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    permission_classes = (AllowAny, )
  1. Simple JWT login
pip install djangorestframework-simplejwt
REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    )
}
INSTALLED_APPS = [
    'rest_framework_simplejwt',
]
from datetime import timedelta

SIMPLE_JWT = {
    'ACCESS_TOKEN_LIFETIME': timedelta(minutes=10),
    'REFRESH_TOKEN_LIFETIME': timedelta(days=1),
    'ROTATE_REFRESH_TOKENS': False,
    'BLACKLIST_AFTER_ROTATION': False,
    'UPDATE_LAST_LOGIN': False,

    'ALGORITHM': 'HS256',
    'SIGNING_KEY': SECRET_KEY,
    'VERIFYING_KEY': None,
    'AUDIENCE': None,
    'ISSUER': None,
    'JWK_URL': None,
    'LEEWAY': 0,

    'AUTH_HEADER_TYPES': ('Bearer',),
    'AUTH_HEADER_NAME': 'HTTP_AUTHORIZATION',
    'USER_ID_FIELD': 'id',
    'USER_ID_CLAIM': 'user_id',
    'USER_AUTHENTICATION_RULE': 'rest_framework_simplejwt.authentication.default_user_authentication_rule',

    'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',),
    'TOKEN_TYPE_CLAIM': 'token_type',

    'JTI_CLAIM': 'jti',

    'SLIDING_TOKEN_REFRESH_EXP_CLAIM': 'refresh_exp',
    'SLIDING_TOKEN_LIFETIME': timedelta(minutes=5),
    'SLIDING_TOKEN_REFRESH_LIFETIME': timedelta(days=1),
}
REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES' : ('rest_framework.permissions.IsAuthenticated',)
    ,
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    )
}
  1. Model Creation
class Todo(models.Model):
    name = models.CharField(max_length=100, null=False)
    description = models.TextField(max_length=400, null=False)
    completed = models.BooleanField(default=False)
    date = models.DateTimeField(default=datetime.utcnow)

    def __str__(self) -> str:
        return self.name
  1. Model Serialization
class TodoSerializer(serializers.ModelSerializer):
    class Meta:
        model = Todo
        fields = "__all__"
  1. Final url.py file from CRUDAPI app
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('', include("todoList.urls")),
    path('admin/', admin.site.urls),
    path('api-auth/', include("rest_framework.urls")),
]
  1. Final url.py from todoList app
from django.urls import path
from rest_framework_simplejwt.views import (
    TokenObtainPairView,
    TokenRefreshView,
)
from .views import UserCreate, TodosListCreateView, TodosRetrieveUpdateDestroyAPIView


urlpatterns = [
    path("registration/", UserCreate.as_view()),
    path('', TodosListCreateView.as_view()),
    path('todos/<int:pk>/', TodosRetrieveUpdateDestroyAPIView.as_view()),
    path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
    path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
]
  1. Final file from views.py from todoList
from .serializers import UserSerializer
from rest_framework import generics
from django.contrib.auth.models import User
from rest_framework.permissions import AllowAny, IsAuthenticatedOrReadOnly
from .models import Todo
from .serializers import TodoSerializer

class UserCreate(generics.CreateAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    permission_classes = (AllowAny,)


class TodosListCreateView(generics.ListCreateAPIView):
    queryset = Todo.objects.all()
    serializer_class = TodoSerializer
    permission_classes = (IsAuthenticatedOrReadOnly, )


class TodosRetrieveUpdateDestroyAPIView(generics.RetrieveUpdateDestroyAPIView):
    queryset = Todo.objects.all()
    serializer_class = TodoSerializer
    permission_classes = (IsAuthenticatedOrReadOnly, )

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages