1. Home
  2. Docs
  3. Django Rest Framework
  4. Class-Based Views

Class-Based Views

এই টিউটোরিয়ালে, আমরা Django REST Framework-এর ক্লাস-ভিত্তিক ভিউ ব্যবহার করে একটি টাস্ক ম্যানেজমেন্ট API তৈরি করব। আমাদের API ব্যবহারকারীদের কাজগুলি তৈরি করতে, পড়তে, আপডেট করতে এবং মুছতে অনুমতি দেবে৷

সেটআপ:

আমরা শুরু করার আগে, নিশ্চিত করুন যে আপনি জ্যাঙ্গো এবং জ্যাঙ্গো REST ফ্রেমওয়ার্ক ইনস্টল করেছেন। আপনি তাদের পিপ এর মাধ্যমে ইনস্টল করতে পারেন:

pip install django djangorestframework
Bash

একটি নতুন জ্যাঙ্গো প্রজেক্ট এবং অ্যাপ তৈরি করুন

django-admin startproject task_manager_project
cd task_manager_project
django-admin startapp tasks
Bash

ধাপ 1: মডেল সংজ্ঞায়িত করুন:

আমাদের অ্যাপ্লিকেশনের tasks মডেল models.py ফাইল তৈরি করুন :

# tasks/models.py

from django.db import models

class Category(models.Model):
    name = models.CharField(max_length=100)

class Task(models.Model):
    title = models.CharField(max_length=200)
    description = models.TextField()
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    due_date = models.DateField()
    completed = models.BooleanField(default=False)
Bash

মাইগ্রেশন চালান:

python manage.py makemigrations
python manage.py migrate
Bash

ধাপ 2: সিরিয়ালাইজার:

এরপর, আমরা জ্যাঙ্গো মডেলগুলিকে JSON-এ রূপান্তর করতে সিরিয়ালাইজার তৈরি করব এবং এর বিপরীতে। serializers.pyঅ্যাপে একটি ফাইল তৈরি করুন tasks:

# tasks/serializers.py

from rest_framework import serializers
from .models import Task, Category

class CategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = Category
        fields = '__all__'

class TaskSerializer(serializers.ModelSerializer):
    class Meta:
        model = Task
        fields = '__all__'
Bash

ধাপ 3: ভিউ:

এখন, CRUD অপারেশন পরিচালনার জন্য আমাদের ক্লাস-ভিত্তিক দৃষ্টিভঙ্গি তৈরি করা যাক। views.pyঅ্যাপে একটি ফাইল তৈরি করুন tasks:

# tasks/views.py

from rest_framework import generics
from .models import Task, Category
from .serializers import TaskSerializer, CategorySerializer

class TaskListCreateAPIView(generics.ListCreateAPIView):
    queryset = Task.objects.all()
    serializer_class = TaskSerializer

class TaskRetrieveUpdateDestroyAPIView(generics.RetrieveUpdateDestroyAPIView):
    queryset = Task.objects.all()
    serializer_class = TaskSerializer

class CategoryListCreateAPIView(generics.ListCreateAPIView):
    queryset = Category.objects.all()
    serializer_class = CategorySerializer

class CategoryRetrieveUpdateDestroyAPIView(generics.RetrieveUpdateDestroyAPIView):
    queryset = Category.objects.all()
    serializer_class = CategorySerializer
Bash

ধাপ 4: URL রাউটিং:

পরিশেষে, আমাদের দৃষ্টিভঙ্গির জন্য ইউআরএল রুট সংজ্ঞায়িত করা যাক। urls.pyঅ্যাপে আপডেট করুন tasks:

# tasks/urls.py

from django.urls import path
from .views import TaskListCreateAPIView, TaskRetrieveUpdateDestroyAPIView, \
                   CategoryListCreateAPIView, CategoryRetrieveUpdateDestroyAPIView

urlpatterns = [
    path('tasks/', TaskListCreateAPIView.as_view(), name='task-list-create'),
    path('tasks/<int:pk>/', TaskRetrieveUpdateDestroyAPIView.as_view(), name='task-retrieve-update-destroy'),
    path('categories/', CategoryListCreateAPIView.as_view(), name='category-list-create'),
    path('categories/<int:pk>/', CategoryRetrieveUpdateDestroyAPIView.as_view(), name='category-retrieve-update-destroy'),
]
Bash

settings.py

INSTALLED_APPS = [
    'rest_framework',
    'tasks',
]
Bash

project urls

from django.urls import path, include

urlpatterns = [
    path('api/', include('tasks.urls')),
]
Bash

ধাপ 5: পরীক্ষা:

সার্ভার চালু করুন:

python manage.py runserver
Bash

API END POINT

# Task API Documentation

This API provides endpoints for managing tasks.

## Endpoints

1. **GET all tasks:**
   - URL: `http://127.0.0.1:8000/api/tasks/`
   - Method: GET
   - No additional data needed.

2. **GET a specific task by ID:**
   - URL: `http://127.0.0.1:8000/api/tasks/:id/`
   - Replace `:id` with the actual ID you want to retrieve.
   - Method: GET
   - No additional data needed.

3. **Create a new task:**
   - URL: `http://127.0.0.1:8000/api/tasks/`
   - Method: POST
   - Body: JSON with the data for the new task.
     ```json
     {
       "title": "New Task",
       "description": "This is a new task",
       "category": 1,
       "due_date": "2024-02-24",
       "completed": false
     }
     ```

4. **Update a specific task by ID:**
   - URL: `http://127.0.0.1:8000/api/tasks/:id/`
   - Replace `:id` with the actual ID you want to update.
   - Method: PUT
   - Body: JSON with the updated data for the task.
     ```json
     {
       "title": "Updated Task",
       "description": "This is the updated task",
       "category": 2,
       "due_date": "2024-02-25",
       "completed": true
     }
     ```

5. **DELETE a specific task by ID:**
   - URL: `http://127.0.0.1:8000/api/tasks/:id/`
   - Replace `:id` with the actual ID you want to delete.
   - Method: DELETE
   - No additional data needed.

6. **GET tasks by category ID:**
   - URL: `http://127.0.0.1:8000/api/categories/:id/tasks/`
   - Replace `:id` with the category ID.
   - Method: GET
   - No additional data needed.

7. **GET tasks by due date range:**
   - URL: `http://127.0.0.1:8000/api/tasks/?due_date__gte=:start_date&due_date__lte=:end_date`
   - Replace `:start_date` and `:end_date` with the start and end dates respectively (in YYYY-MM-DD format).
   - Method: GET
   - No additional data needed.
Bash

How can we help?