برنامه نویسی

آموزش Django Rest Framework

آموزش Django Rest Framework

17 دقیقه زمان برای خواندن این مطلب نیاز است.


فهرست مطالب


در عصر حاضر، توسعه اپلیکیشن‌های مدرن بدون استفاده از APIها تقریباً غیرممکن است. چه در حال ساخت یک اپلیکیشن موبایل باشید، چه یک برنامه تک‌صفحه‌ای React یا Vue، و یا حتی یک میکروسرویس، به یک API قدرتمند و قابل اعتماد نیاز دارید. اینجاست که آموزش Django Rest Framework به عنوان یکی از حیاتی‌ترین مهارت‌ها برای هر توسعه‌دهنده پایتون مطرح می‌شود. آموزش Django Rest Framework به شما امکان می‌دهد تا APIهای RESTful حرفه‌ای، مقیاس‌پذیر و امن را با کمترین زمان و بیشترین کیفیت بسازید. در این مقاله از دانا پدیا، به صورت کاملاً تخصصی و جامع به آموزش Django Rest Framework می‌پردازیم. اگر شما یک توسعه‌دهنده پایتون هستید، چه مبتدی و چه حرفه‌ای، این مطلب دقیقاً همان چیزی است که برای درک عمیق آموزش Django Rest Framework و پیاده‌سازی APIهای حرفه‌ای نیاز دارید.

Django Rest Framework یک کتابخانه قدرتمند و انعطاف‌پذیر است که بر پایه فریم‌ورک Django ساخته شده و فرآیند ساخت Web APIها را بسیار ساده می‌کند. این کتابخانه امکاناتی نظیر سریالایزیشن قدرتمند، احراز هویت متنوع، کنترل دسترسی، صفحه‌بندی، فیلترینگ و یک API مرورگر پسند (Browsable API) را ارائه می‌دهدآموزش Django Rest Framework در سال ۲۰۲۶ بیش از هر زمان دیگری اهمیت یافته است، زیرا با انتشار نسخه ۳.۱۶ و ۳.۱۷، DRF پشتیبانی کامل از Django 5.2 LTS و Python 3.13 را ارائه می‌دهد و به عنوان یک انتخاب استاندارد برای توسعه API در سازمان‌های بزرگ شناخته می‌شود.

در این مقاله از دانا پدیـا، ابتدا با اصول و مفاهیم پایه آموزش Django Rest Framework آشنا می‌شویم، سپس گام به گام یک پروژه عملی را پیاده‌سازی می‌کنیم. از نصب و راه‌اندازی اولیه تا ساخت ماژول‌های پیشرفته، از ایجاد مدل‌های دیتابیس و سریالایزرها تا پیاده‌سازی Viewهای مختلف (Function-Based و Class-Based)، و در نهایت به مباحث احراز هویت (Authentication)، مجوزدهی (Permissions)، فیلترینگ، صفحه‌بندی و تست خودکار خواهیم پرداخت. همچنین در انتها به سوالات متداول در زمینه آموزش Django Rest Framework پاسخ خواهیم داد. هدف ما ارائه یک مرجع کامل و سئو شده است که نه تنها پاسخگوی نیازهای روزانه شما باشد، بلکه به عنوان یک منبع آموزشی معتبر در دانا پدیا باقی بماند.

Object.assign در جاوااسکریپت

آموزش Django Rest Framework

Django Rest Framework چیست و چرا اهمیت دارد؟

قبل از شروع آموزش Django Rest Framework، باید درک کنیم این فریم‌ورک دقیقاً چیست و چه مشکلاتی را حل می‌کند. Django یک فریم‌ورک تمام‌کاره برای ساخت وب‌اپلیکیشن‌های سنتی است. Django به طور پیش‌فرض HTML تولید می‌کند و برای ساخت APIهای مدرن که نیاز به بازگشت JSON دارند، طراحی نشده است. اینجاست که آموزش Django Rest Framework وارد میدان می‌شود. DRF یک افزونه است که بر روی Django سوار می‌شود و آن را به یک پلتفرم قدرتمند برای ساخت APIهای RESTful تبدیل می‌کند.

تفاوت اصلی Django و DRF در خروجی آن‌هاست: Django صفحات HTML تولید می‌کند، در حالی که DRF داده‌های خام مانند JSON را بازمی‌گرداند که توسط اپلیکیشن‌های موبایل و فریم‌ورک‌های فرانت‌اند قابل استفاده است.

اهمیت آموزش Django Rest Framework در دنیای امروز را نمی‌توان نادیده گرفت. بر اساس گزارش‌های صنعتی، بیش از ۸۰٪ از شرکت‌های جهانی به RESTful APIها برای یکپارچه‌سازی سیستم‌های خود متکی هستند. DRF به دلیل یکپارچگی عمیق با Django، پشتیبانی از اصول DRY (Don’t Repeat Yourself) و ابزارهای قدرتمندی مانند سریالایزرها، ویوست‌ها و مکانیسم‌های احراز هویت، به عنوان یک انتخاب برتر برای ساخت APIهای مقیاس‌پذیر شناخته می‌شود.

Remix Framework چیست

نصب و راه‌اندازی اولیه برای آموزش Django Rest Framework

برای شروع آموزش Django Rest Framework، ابتدا باید محیط توسعه خود را آماده کنیم. مراحل زیر را به ترتیب دنبال کنید:

پیش‌نیازهای لازم

قبل از شروع، مطمئن شوید که Python نسخه ۳.۱۰ یا بالاتر روی سیستم شما نصب است. همچنین Django 4.2، 5.0، 5.1، 5.2 یا 6.0 نصب باشد.

ایجاد پروژه و نصب DRF

۱. ابتدا یک محیط مجازی برای پروژه خود ایجاد کنید:

bash

python -m venv myenv
source myenv/bin/activate  # در Windows: myenv\Scripts\activate

۲. Django و DRF را نصب کنید:

bash

pip install django
pip install djangorestframework

۳. یک پروژه جدید Django ایجاد کنید:

bash

django-admin startproject myproject
cd myproject

۴. یک اپلیکیشن جدید برای API خود بسازید:

bash

python manage.py startapp api

۵. فایل settings.py را باز کنید و 'rest_framework' و اپلیکیشن خود را به INSTALLED_APPS اضافه کنید:

python

INSTALLED_APPS = [
    # ...
    'rest_framework',
    'api',
]

۶. یک مدل ساده برای آزمایش ایجاد کنید. فایل api/models.py را باز کنید:

python

from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=100)
    published_date = models.DateField()
    isbn = models.CharField(max_length=13, unique=True)

    def __str__(self):
        return self.title

۷. migrationها را اعمال کنید و ابرکاربر بسازید:

bash

python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser

قلب DRF: سریالایزرها (Serializers)

یکی از مهم‌ترین مفاهیم در آموزش Django Rest Framework، سریالایزرها هستند. سریالایزرها داده‌های پیچیده مانند مدل‌های Django را به فرمت‌های قابل انتقال مانند JSON تبدیل می‌کنند و بالعکس. در آموزش Django Rest Framework، سریالایزرها همچنین مسئول اعتبارسنجی داده‌های ورودی نیز هستند.

Webpack Tree Shaking

دو نوع اصلی سریالایزر در DRF

در آموزش Django Rest Framework با دو نوع اصلی سریالایزر مواجه می‌شویم:

  • Serializer: یک کلاس پایه که شما تمام فیلدها را به صورت دستی تعریف می‌کنید. این گزینه برای موقعیت‌هایی که مدل Django ندارید یا نیاز به کنترل کامل دارید، مناسب است.
  • ModelSerializer: یک سریالایزر پیشرفته که به طور خودکار فیلدها را از مدل Django استخراج می‌کند. آموزش Django Rest Framework معمولاً با ModelSerializer شروع می‌شود زیرا کدنویسی را به شدت کاهش می‌دهد.

ساخت سریالایزر برای مدل Book

حالا در آموزش Django Rest Framework خود، یک فایل جدید به نام api/serializers.py ایجاد کنید:

python

from rest_framework import serializers
from .models import Book

class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = '__all__'  # تمام فیلدهای مدل را شامل می‌شود

پیکربندی بیشتر در کلاس Meta

در آموزش Django Rest Framework، کلاس Meta به شما امکان می‌دهد رفتار سریالایزر را دقیق تنظیم کنید:

  • fields = ['title', 'author']: فقط فیلدهای مشخص شده را سریالایز می‌کند.
  • exclude = ['isbn']: فیلدهای مشخص شده را حذف می‌کند (نمی‌توان همزمان با fields استفاده کرد).
  • read_only_fields = ['isbn']: فیلد را فقط خواندنی می‌کند، کاربر نمی‌تواند آن را ایجاد یا به‌روزرسانی کند، اما می‌تواند آن را ببیند.
  • write_only_fields: برعکس عمل می‌کند و فیلد را فقط نوشتنی می‌کند.

Docker Health Check

اعتبارسنجی (Validation) در سریالایزرها

یکی از قابلیت‌های قدرتمند آموزش Django Rest Framework، اعتبارسنجی خودکار است. شما می‌توانید اعتبارسنجی سطح فیلد و سطح شیء را اضافه کنید:

python

class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = '__all__'

    def validate_isbn(self, value):
        if len(value) != 13:
            raise serializers.ValidationError("ISBN باید ۱۳ رقم باشد")
        return value

    def validate(self, data):
        if data['title'] == data['author']:
            raise serializers.ValidationError("عنوان و نویسنده نمی‌توانند یکسان باشند")
        return data

ویوها (Views) در Django Rest Framework

بعد از سریالایزرها، مهم‌ترین بخش آموزش Django Rest Framework، ویوها هستند. ویوها منطق دریافت درخواست، پردازش داده و بازگرداندن پاسخ را مدیریت می‌کنند. در DRF، سه دسته اصلی ویو وجود دارد.

Python Structural Pattern Matching

۱. Function-Based Views (FBVs)

برای سادگی و کنترل بیشتر، می‌توانید از تابع‌های معمولی پایتون استفاده کنید. این روش برای شروع آموزش Django Rest Framework بسیار مناسب است:

python

from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework import status
from .models import Book
from .serializers import BookSerializer

@api_view(['GET', 'POST'])
def book_list(request):
    if request.method == 'GET':
        books = Book.objects.all()
        serializer = BookSerializer(books, many=True)
        return Response(serializer.data)

    elif request.method == 'POST':
        serializer = BookSerializer(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)

۲. Class-Based Views (CBVs) – APIView

برای پروژه‌های بزرگ، آموزش Django Rest Framework معمولاً به سمت استفاده از ویوهای کلاس‌محور می‌رود. کلاس APIView پایه‌ای‌ترین گزینه است:

python

from rest_framework.views import APIView

class BookList(APIView):
    def get(self, request):
        books = Book.objects.all()
        serializer = BookSerializer(books, many=True)
        return Response(serializer.data)

    def post(self, request):
        serializer = BookSerializer(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)

۳. Generic Views

یکی از نقاط قوت آموزش Django Rest Framework، ویوهای جنریک است که عملیات رایج CRUD را از پیش پیاده‌سازی می‌کنند. به عنوان مثال، ListCreateAPIView و RetrieveUpdateDestroyAPIView:

python

from rest_framework.generics import ListCreateAPIView, RetrieveUpdateDestroyAPIView

class BookListCreateView(ListCreateAPIView):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

class BookDetailView(RetrieveUpdateDestroyAPIView):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

این روش کدنویسی را به حداقل می‌رساند و در عین حال انعطاف‌پذیری بالایی دارد.

۴. ویوست‌ها (ViewSets) و روترها (Routers)

در آموزش Django Rest Framework پیشرفته، ViewSetها و Routerها بسیار محبوب هستند. یک ViewSet تمام عملیات CRUD را در یک کلاس واحد جمع می‌کند:

python

from rest_framework.viewsets import ModelViewSet

class BookViewSet(ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

ModelViewSet به طور خودکار متدهای list()، create()، retrieve()، update() و destroy() را ارائه می‌دهد.

برای متصل کردن ViewSet به URLها، از روتر (Router) استفاده می‌کنیم:

python

# در فایل urls.py پروژه
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from api.views import BookViewSet

router = DefaultRouter()
router.register(r'books', BookViewSet)

urlpatterns = [
    path('', include(router.urls)),
]

روترها به طور خودکار تمام URLهای مورد نیاز (مانند /books/، /books/{id}/ و غیره) را تولید می‌کنند.

۵. Generic ViewSet

اگر نیاز به کنترل بیشتری دارید اما همچنان می‌خواهید از مزایای کلاس‌های جنریک استفاده کنید، می‌توانید از GenericViewSet همراه با mixinها استفاده کنید:

python

from rest_framework.viewsets import GenericViewSet
from rest_framework.mixins import ListModelMixin, CreateModelMixin

class BookPartialViewSet(GenericViewSet, ListModelMixin, CreateModelMixin):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

۶. ViewSet سفارشی با action‌های اضافی

یکی از قوی‌ترین قابلیت‌های آموزش Django Rest Framework، افزودن اکشن‌های سفارشی به ViewSetها با استفاده از دکوراتور @action است:

python

from rest_framework.decorators import action
from rest_framework.response import Response

class BookViewSet(ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

    @action(detail=False, methods=['get'])
    def recent(self, request):
        recent_books = Book.objects.order_by('-id')[:5]
        serializer = self.get_serializer(recent_books, many=True)
        return Response(serializer.data)

    @action(detail=True, methods=['post'])
    def mark_as_read(self, request, pk=None):
        book = self.get_object()
        # منطق علامت‌گذاری به عنوان خوانده شده
        return Response({'status': 'marked as read'})

آکشن‌های سفارشی به صورت خودکار endpointهایی مانند /books/recent/ و /books/{id}/mark_as_read/ ایجاد می‌کنند.

تست نفوذ API

احراز هویت (Authentication) و مجوزدهی (Permissions) در DRF

یکی از حیاتی‌ترین بخش‌های آموزش Django Rest Framework، امنیت API است. DRF دو مفهوم کلیدی را ارائه می‌دهد: احراز هویت (Authentication) که مشخص می‌کند کاربر کیست، و مجوزدهی (Permission) که مشخص می‌کند کاربر چه کاری می‌تواند انجام دهد.

پیکربندی سراسری در settings.py

برای تنظیم احراز هویت و مجوزدهی به صورت سراسری، به فایل settings.py مراجعه کنید:

python

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework.authentication.SessionAuthentication',
    ],
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',
    ],
}

انواع احراز هویت در DRF

در آموزش Django Rest Framework، چندین گزینه احراز هویت موجود است:

  • BasicAuthentication: احراز هویت با نام کاربری و رمز عبور HTTP Basic (مناسب برای تست).
  • SessionAuthentication: استفاده از سشن‌های Django (برای APIهایی که از مرورگر استفاده می‌کنند).
  • TokenAuthentication: استفاده از توکن‌های ساده.
  • JSON Web Token (JWT): محبوب‌ترین گزینه برای APIهای مدرن.

برای پیاده‌سازی JWT، ابتدا کتابخانه djangorestframework-simplejwt را نصب کنید:

bash

pip install djangorestframework-simplejwt

سپس تنظیمات را اضافه کنید:

python

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ),
}

انواع مجوزدهی (Permission Classes)

در آموزش Django Rest Framework، مجوزدهی به شما امکان می‌دهد کنترل دقیقی بر دسترسی‌ها داشته باشید:

  • AllowAny: دسترسی آزاد برای همه (پیش‌فرض).
  • IsAuthenticated: فقط کاربران احراز هویت شده.
  • IsAdminUser: فقط کاربرانی که is_staff=True دارند.
  • IsAuthenticatedOrReadOnly: کاربران احراز هویت شده همه عملیات‌ها را دارند، بقیه فقط خواندنی.
  • DjangoModelPermissions: بر اساس مجوزهای مدل‌های Django.

API Rate Limiting در Express

اعمال Permission در سطح ViewSet

python

from rest_framework.permissions import IsAuthenticated

class BookViewSet(ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer
    permission_classes = [IsAuthenticated]

    def get_permissions(self):
        if self.action == 'list':
            return [AllowAny()]
        return super().get_permissions()

ساخت Permission سفارشی

برای سناریوهای پیچیده‌تر، آموزش Django Rest Framework به شما امکان می‌دهد کلاس‌های مجوزدهی سفارشی بسازید:

python

from rest_framework import permissions

class IsOwnerOrReadOnly(permissions.BasePermission):
    def has_object_permission(self, request, view, obj):
        if request.method in permissions.SAFE_METHODS:
            return True
        return obj.owner == request.user

فیلتر کردن (Filtering) و صفحه‌بندی (Pagination)

برای APIهای با حجم داده بالا، فیلتر کردن و صفحه‌بندی ضروری است. آموزش Django Rest Framework ابزارهای قدرتمندی در این زمینه ارائه می‌دهد.

الگوریتم های یادگیری تقویتی

نصب و راه‌اندازی django-filter

ابتدا کتابخانه مورد نیاز را نصب کنید:

bash

pip install django-filter

سپس در settings.py تنظیمات را اضافه کنید:

python

REST_FRAMEWORK = {
    'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend']
}

فیلتر کردن در ViewSet

python

from django_filters.rest_framework import DjangoFilterBackend
from rest_framework import filters

class BookViewSet(ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer
    filter_backends = [DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter]
    filterset_fields = ['author', 'published_date']
    search_fields = ['title', 'author']
    ordering_fields = ['published_date', 'title']

صفحه‌بندی (Pagination)

سه روش اصلی صفحه‌بندی در آموزش Django Rest Framework وجود دارد:

۱. PageNumberPagination (متدوال‌ترین):

python

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 10
}

۲. LimitOffsetPagination (مشابه Github API):

python

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination',
    'PAGE_SIZE': 10
}

۳. CursorPagination (برای داده‌های با حجم بسیار بالا و جلوگیری از duplicate):

python

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.CursorPagination',
    'PAGE_SIZE': 10
}

محدودیت نرخ درخواست (Throttling)

برای جلوگیری از حملات Brute-Force و حفظ پایداری سرور، آموزش Django Rest Framework مفهوم throttling را ارائه می‌دهد:

python

REST_FRAMEWORK = {
    'DEFAULT_THROTTLE_CLASSES': [
        'rest_framework.throttling.AnonRateThrottle',
        'rest_framework.throttling.UserRateThrottle'
    ],
    'DEFAULT_THROTTLE_RATES': {
        'anon': '100/day',      # کاربران ناشناس: 100 بار در روز
        'user': '1000/hour'     # کاربران احراز هویت شده: 1000 بار در ساعت
    }
}

برای APIهای حساس، می‌توانید محدودیت سفارشی اعمال کنید:

python

from rest_framework.throttling import UserRateThrottle

class LoginThrottle(UserRateThrottle):
    rate = '5/minute'  # حداکثر ۵ تلاش در دقیقه

تست و عیب‌یابی (Testing)

بخش حیاتی آموزش Django Rest Framework، تست کردن APIهاست. DRF ابزارهای قدرتمندی برای تست خودکار ارائه می‌دهد.

استفاده از APITestCase برای تست خودکار

python

from rest_framework.test import APITestCase
from django.contrib.auth.models import User
from rest_framework import status

class BookAPITestCase(APITestCase):
    def setUp(self):
        self.user = User.objects.create_user(username='testuser', password='testpass')
        self.client.login(username='testuser', password='testpass')

    def test_create_book(self):
        data = {
            'title': 'Django for APIs',
            'author': 'William S. Vincent',
            'published_date': '2024-01-01',
            'isbn': '9781234567897'
        }
        response = self.client.post('/api/books/', data)
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
        self.assertEqual(response.data['title'], 'Django for APIs')

استفاده از pytest برای تست‌های پیشرفته

برای تست‌های پیچیده‌تر، آموزش Django Rest Framework از pytest پشتیبانی می‌کند:

bash

pip install pytest pytest-django

python

import pytest
from django.urls import reverse
from rest_framework.test import APIClient

@pytest.mark.django_db
def test_book_list():
    client = APIClient()
    url = reverse('book-list')
    response = client.get(url)
    assert response.status_code == 200

نسخه‌بندی API (Versioning)

برای مدیریت تغییرات API در طول زمان، آموزش Django Rest Framework از نسخه‌بندی پشتیبانی می‌کند. چهار روش اصلی وجود دارد:

۱. AcceptHeaderVersioning: استفاده از هدر Accept
۲. URLPathVersioning: استفاده از قسمت مسیر URL (مانند /api/v1/books/)
۳. NamespaceVersioning: استفاده از namespace در URLconf
۴. HostNameVersioning: استفاده از ساب‌دامین (مانند v1.api.example.com)

روش پیشنهادی URLPathVersioning:

python

# در settings.py
REST_FRAMEWORK = {
    'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.URLPathVersioning'
}

ساختار پروژه و بهترین روش‌ها

در آموزش Django Rest Framework پیشرفته، ساختار پروژه نقش مهمی در مقیاس‌پذیری و نگهداری کد دارد.

TypeScript 5.5 ویژگی های جدید

ساختار پیشنهادی پوشه‌ها

text

myproject/
├── manage.py
├── myproject/
│   ├── settings/
│   │   ├── base.py      # تنظیمات پایه
│   │   ├── development.py
│   │   └── production.py
│   └── urls.py
├── apps/
│   ├── books/
│   │   ├── models.py
│   │   ├── serializers.py
│   │   ├── views.py
│   │   └── urls.py
│   ├── users/
│   │   ├── models.py
│   │   ├── serializers.py
│   │   ├── views.py
│   │   └── urls.py
│   └── common/
│       ├── permissions.py
│       └── pagination.py
├── static/
├── media/
└── requirements/
    ├── base.txt
    ├── dev.txt
    └── prod.txt

این ساختار که الهام گرفته از معماری Domain-Driven Design (DDD) و Clean Architecture است، به شما امکان می‌دهد پروژه‌های مقیاس‌پذیر و قابل نگهداری بسازید.

PostgreSQL Full Text Search

استقرار (Deployment) و DevOps

مرحله نهایی آموزش Django Rest Framework، استقرار API در محیط تولید است. گزینه‌های محبوب عبارتند از:

۱. استفاده از Docker

dockerfile

FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["gunicorn", "myproject.wsgi:application", "--bind", "0.0.0.0:8000"]

۲. استفاده از Gunicorn و Nginx

bash

gunicorn myproject.wsgi:application --workers 4 --bind 127.0.0.1:8000

۳. سرویس‌های ابری

  • Heroku: با استفاده از django-heroku به سادگی
  • AWS Elastic Beanstalk: برای مقیاس‌پذیری بالا
  • DigitalOcean App Platform: ساده و مقرون به صرفه
  • PythonAnywhere: برای پروژه‌های کوچک

۴. CI/CD Pipeline خودکار

برای استقرار خودکار، می‌توانید از GitHub Actions یا GitLab CI استفاده کنید تا پس از هر push، تست‌ها اجرا و کد مستقر شود.

نتیجه‌گیری نهایی

در این مقاله از دانا پدیا، به طور جامع و تخصصی به آموزش Django Rest Framework پرداختیم. با آموزش Django Rest Framework متوجه شدیم که این ابزار قدرتمند چگونه می‌تواند فرآیند ساخت APIهای RESTful را ساده‌تر، سریع‌تر و حرفه‌ای‌تر کند. از مفاهیم پایه مانند سریالایزرها و ویوها گرفته تا مباحث پیشرفته مانند احراز هویت JWT، مجوزدهی سفارشی، فیلترینگ، صفحه‌بندی، محدودیت نرخ درخواست، تست خودکار و استقرار در محیط تولید – همه را پوشش دادیم.

آموزش Django Rest Framework نشان داد که چگونه می‌توان با استفاده از ModelSerializer و ModelViewSet کدهای تکراری را به حداقل رساند و در عین حال انعطاف‌پذیری لازم برای سفارشی‌سازی را حفظ کرد. همچنین یاد گرفتیم که چگونه می‌توان با استفاده از سیاست‌های امنیتی مناسب، APIهای خود را در برابر تهدیدات رایج محافظت کرد.

ما در دانا پدیا معتقدیم که تسلط بر آموزش Django Rest Framework برای هر توسعه‌دهنده پایتون که به دنبال ساخت اپلیکیشن‌های مدرن و مقیاس‌پذیر است، ضروری می‌باشد. با استفاده از دانشی که در این آموزش کسب کردید، می‌توانید APIهای حرفه‌ای، امن و با کارایی بالا بسازید.

آموزش Django Rest Framework

سوالات متداول (FAQ)

سوال ۱: تفاوت بین Django و Django Rest Framework چیست؟

پاسخ: Django یک فریم‌ورک تمام‌کاره برای ساخت وب‌اپلیکیشن‌های سنتی است که خروجی HTML تولید می‌کند. در مقابل، Django Rest Framework یک کتابخانه تخصصی است که بر روی Django سوار می‌شود و برای ساخت APIهای RESTful که خروجی JSON تولید می‌کنند، طراحی شده است. می‌توان گفت Django برای صفحات وب و DRF برای APIهاست.

سوال ۲: چه زمانی باید از ModelSerializer استفاده کنیم و چه زمانی از Serializer ساده؟

پاسخ: ModelSerializer زمانی که با مدل‌های Django کار می‌کنید، گزینه ایده‌آل است زیرا به طور خودکار فیلدها را از مدل استخراج می‌کند، create() و update() را پیاده‌سازی می‌کند، و کد تکراری را به حداقل می‌رساند. Serializer ساده برای زمانی که داده‌های شما از مدل Django نمی‌آیند یا نیاز به کنترل کامل بر فیلدها و منطق اعتبارسنجی دارید، مناسب‌تر است.

سوال ۳: کدام روش احراز هویت برای APIهای مدرن توصیه می‌شود؟

پاسخ: برای APIهای مدرن، JWT (JSON Web Token) به دلیل stateless بودن، امنیت بالا و پشتیبانی گسترده توسط کلاینت‌های مختلف (React، Vue، موبایل) توصیه می‌شود. کتابخانه djangorestframework-simplejwt بهترین انتخاب برای پیاده‌سازی JWT در DRF است.

سوال ۴: چگونه می‌توانیم API خود را در برابر حملات Brute-Force محافظت کنیم؟

پاسخ: با استفاده از مکانیسم Throttling (محدودیت نرخ درخواست). می‌توانید در تنظیمات سراسری یا در سطح view خاص، محدودیت تعیین کنید. به عنوان مثال، محدودیت ۵ تلاش در دقیقه برای endpoint ورود به سیستم.

سوال ۵: آیا می‌توان بدون نوشتن کد اضافی، صفحه‌بندی را به API اضافه کرد؟

پاسخ: بله، DRF صفحه‌بندی را به صورت توکار پشتیبانی می‌کند. فقط کافی است در settings.py مقدار DEFAULT_PAGINATION_CLASS و PAGE_SIZE را تنظیم کنید. سپس تمام ViewSetها و Generic Views به طور خودکار از صفحه‌بندی استفاده می‌کنند.

سوال ۶: بهترین روش برای تست APIهای DRF چیست؟

پاسخ: DRF کلاس APITestCase را ارائه می‌دهد که از TestCase Django ارث‌بری می‌کند و متدهای کمکی برای درخواست‌های API دارد. برای تست‌های پیشرفته‌تر، می‌توانید از pytest با پلاگین pytest-django استفاده کنید. تست خودکار باید بخشی از CI/CD pipeline شما باشد.

سوال ۷: چگونه می‌توان نسخه‌بندی API را پیاده‌سازی کرد؟

پاسخ: روش پیشنهادی URLPathVersioning است. کافی است در settings.py مقدار DEFAULT_VERSIONING_CLASS را به 'rest_framework.versioning.URLPathVersioning' تنظیم کنید و سپس URLها را به صورت /api/v1/books/ تعریف کنید.

سوال ۸: تفاوت بین ViewSet و APIView چیست؟

پاسخ: APIView یک ویو کلاس‌محور پایه است که شما متدهای get()، post()، put() و غیره را به صورت دستی پیاده‌سازی می‌کنید. ViewSet یک سطح انتزاع بالاتر است که عملیات مربوط به یک منبع را گروه‌بندی می‌کند و با استفاده از Router می‌تواند URLها را به طور خودکار بسازد. برای CRUDهای استاندارد، ModelViewSet بهترین گزینه است.

سوال ۹: آیا DRF از وب سوکت و APIهای بلادرنگ پشتیبانی می‌کند؟

پاسخ: DRF خود به صورت بومی از وب سوکت پشتیبانی نمی‌کند. برای APIهای بلادرنگ، باید از کتابخانه‌های جداگانه مانند Django Channels استفاده کنید. با این حال، DRF و Django Channels با هم به خوبی کار می‌کنند و می‌توانید از هر دو در یک پروژه استفاده کنید.

سوال ۱۰: چگونه می‌توانیم مستندات خودکار برای API خود تولید کنیم؟

پاسخ: DRF به طور پیش‌فرض یک Browsable API ارائه می‌دهد که در مرورگر قابل مشاهده و تعامل است. همچنین با استفاده از کتابخانه‌های drf-spectacular یا drf-yasg می‌توانید مستندات OpenAPI (Swagger) خودکار تولید کنید.

دیدگاهتان را بنویسید