Rest Api

settings.py

  INSTALLED_APPS = [
      'rest_framework',
      ]

models.py

from django_mongoengine import Document
from django_mongoengine.fields
# Create your models here.
class Category(Document):
    name = fields.StringField()
    def __str__(self):
        return self.name    

serializer.py

from rest_framework import serializers
from Blog.models import Category

class CategorySerializer(serializers.Serializer):
    
    name = serializers.CharField()
    def to_representation(self,instance):
        return {
           
            'name':instance.name
        }
        
    def create(self,validated_data) :
        return Category(**validated_data)
           
    def update(self,instance,validated_data) :
        instance.name= validated_data.get('name',instance.name)
        instance.save()
        return instance

views.py

from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework import status

from Blog.models import Category
from .serializer import CategorySerializer

@api_view(['POST'])
def create_category(request):
    serializer = CategorySerializer(data=request.data)
    if serializer.is_valid():
        category_instance = Category(**serializer.validated_data)
        category_instance.save()
        serializer_category = CategorySerializer(category_instance)
        return Response(serializer_category.data,status=status.HTTP_201_CREATED)
    else:
        return Response(serializer.errors,status=status.HTTP_400_BAD_REQUEST)
    
    
@api_view(['GET'])  
def category_list(request):  
    category = Category.objects.all()
    serializer=CategorySerializer(category,many=True)
    return Response(serializer.data,status=status.HTTP_200_OK)

@api_view(['GET'])
def category_details(request,name):
    try:
        category= Category.objects.get(name=name)
    
    except Category.DoesNotExist:   
        return Response(status=status.HTTP_404_NOT_FOUND)
    
    serializer = CategorySerializer(category)
    return Response(serializer.data,status=status.HTTP_200_OK)

@api_view(['PUT'])
def category_edit(request,name):
    try:
        category = Category.objects.get(name=name)
    except Category.DoesNotExist:
        return Response(status=status.HTTP_404_NOT_FOUND)    
    serializer= CategorySerializer(category,data=request.data)
    if serializer.is_valid():
        #Implement  the  update logic
        updated_category = serializer.update(category,serializer.validated_data)
        updated_serializer=CategorySerializer(updated_category)
        
        return Response(updated_serializer.data,status=status.HTTP_200_OK)
    else :
        return Response(serializer.errors,status=status.HTTP_400_BAD_REQUEST)
    
    
@api_view(['DELETE'])    
def category_delete(request,name):
    try:
        category = Category.objects.get(name=name)
    except Category.DoesNotExist:
        return Response(status=status.HTTP_404_NOT_FOUND) 
        
    category.delete()
    return Response(status=status.HTTP_204_NO_CONTENT)

urls.py

from django.urls import path
from .import views
urlpatterns = [
   path('create_category/',views.create_category,name='create_category'), 
   path('category_list/',views.category_list,name='category_list'), 
   path('category_details/<str:name>',views.category_details,name='category_details'),     
   path('category_edit/<str:name>',views.category_edit,name='category_edit'),  
   path('category_delete/<str:name>',views.category_delete,name='category_delete'),  

]

Last updated