1. Home
  2. Docs
  3. Django Rest Framework
  4. APIView ভিউ

APIView ভিউ

মডেল এবং সিরিয়ালাইজার আগের টিউটোরিয়াল থেকে কপি করো

APIView আমরা দুই ভাবে ব্যবহার করতে পারি

  • ক্লাস ভিউ
  • ফাংশন ভিউ

APIView ক্লাস ভিউ

APIView ক্লাস ভিউ আমরা দুই ভাবে ব্যবহার করতে পারি

একটি ক্লাসের মধ্যে ডেটাবেজ এ ডেটা ইন্সার্ট ,রিড ,আপডেট ডিলেট করার মেথড লিষ্টে পারি

মাল্টিপল পোস্ট ডেটাবেজ থেকে আনার জন্য many=True ব্যবহার করতে হবে

# myapp/views.py
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .models import Post
from .serializers import PostSerializer

class PostView(APIView):
    def get(self, request, pk=None):
        if pk:
            post = Post.objects.get(pk=pk)
            serializer = PostSerializer(post)
            return Response(serializer.data)
        else:
            posts = Post.objects.all()
            serializer = PostSerializer(posts, many=True)
            return Response(serializer.data)

    def post(self, request):
        serializer = PostSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    def put(self, request, pk):
        post = Post.objects.get(pk=pk)
        serializer = PostSerializer(post, data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    def delete(self, request, pk):
        post = Post.objects.get(pk=pk)
        post.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)

urls.py

# myapp/urls.py
from django.urls import path
from .views import PostView

urlpatterns = [
    path('posts/', PostView.as_view(), name='post-list'),
    path('posts/<int:pk>/', PostView.as_view(), name='post-detail'),
]

APIView ফাংশন ভিউ

APIView ফাংশন ভিউ আমরা দুই ভাবে ব্যবহার করতে পারি

১. একটি ফাংশন মধ্যে ডেটাবেজ এ ডেটা ইন্সার্ট ,রিড ,আপডেট ডিলেট করার মেথড লিষ্টে পারি

views.py

# myapp/views.py
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework import status
from .models import Post
from .serializers import PostSerializer

@api_view(['GET', 'POST'])
def post_list(request):
    if request.method == 'GET':
        posts = Post.objects.all()
        serializer = PostSerializer(posts, many=True)
        return Response(serializer.data)

    elif request.method == 'POST':
        serializer = PostSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

@api_view(['GET', 'PUT', 'DELETE'])
def post_detail(request, pk):
    try:
        post = Post.objects.get(pk=pk)
    except Post.DoesNotExist:
        return Response(status=status.HTTP_404_NOT_FOUND)

    if request.method == 'GET':
        serializer = PostSerializer(post)
        return Response(serializer.data)

    elif request.method == 'PUT':
        serializer = PostSerializer(post, data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    elif request.method == 'DELETE':
        post.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)

urls.py

# myapp/urls.py
from django.urls import path
from .views import post_list, post_detail

urlpatterns = [
    path('posts/', post_list, name='post-list'),
    path('posts/<int:id>/', post_detail, name='post-detail'),
]

২. যদি আরো এক্সট্রা রাউট লাগে তখন কাস্টম আরেকটি ফাংশন বানিয়ে অতিরিক্তি ইউআরএল এর কোড লিখতে পারি

# myapp/views.py
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework import status
from .models import Post
from .serializers import PostSerializer

@api_view(['GET'])
def single_post_view(request, pk):
    try:
        post = Post.objects.get(pk=pk)
        serializer = PostSerializer(post)
        return Response(serializer.data)
    except Post.DoesNotExist:
        return Response(status=status.HTTP_404_NOT_FOUND)

@api_view(['GET'])
def all_post_view(request):
    posts = Post.objects.all()
    serializer = PostSerializer(posts, many=True)
    return Response(serializer.data)
# myapp/urls.py
from django.urls import path
from .views import single_post_view, all_post_view

urlpatterns = [
    path('posts/<int:pk>/', single_post_view, name='single-post-view'),
    path('posts/', all_post_view, name='all-post-view'),
]

How can we help?