ساخت REST API با Django REST Framework
در دنیای توسعه وب مدرن، معماری REST (Representational State Transfer) به عنوان یک الگوی رایج برای ساخت رابطهای برنامهنویسی کاربردی (API) شناخته میشود. Django REST Framework (DRF) یک ابزار قدرتمند و انعطافپذیر برای ساخت REST API با استفاده از فریمورک Django پایتون است. این مقاله به آموزش گام به گام ساخت یک REST API ساده با استفاده از DRF میپردازد.
پیشنیازها
قبل از شروع، اطمینان حاصل کنید که موارد زیر را دارید:
- پایتون نصب شده (نسخه 3.6 یا بالاتر توصیه میشود)
- Django نصب شده
- Django REST Framework نصب شده
برای نصب DRF، از دستور زیر استفاده کنید:
pip install djangorestframework
ایجاد یک پروژه Django
ابتدا یک پروژه Django جدید ایجاد کنید:
django-admin startproject myapi
سپس به دایرکتوری پروژه بروید:
cd myapi
ایجاد یک برنامه Django
یک برنامه Django جدید برای API خود ایجاد کنید:
python manage.py startapp snippets
تعریف مدلها
در فایل snippets/models.py، مدلهای مورد نیاز خود را تعریف کنید. به عنوان مثال، یک مدل برای ذخیره قطعههای کد:
from django.db import models
class Snippet(models.Model):
title = models.CharField(max_length=100)
code = models.TextField()
created = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
سپس، مدل را در فایل snippets/admin.py ثبت کنید تا بتوانید آن را از طریق رابط کاربری Django Admin مدیریت کنید.
و در نهایت، تغییرات را در فایل myapi/settings.py اعمال کنید. در بخش INSTALLED_APPS، برنامه snippets را اضافه کنید:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'snippets',
]
و همچنین، migration ها را اجرا کنید:
python manage.py makemigrations snippets python manage.py migrate
ایجاد Serializer
Serializerها در DRF برای تبدیل مدلهای Django به فرمتهای قابل انتقال مانند JSON استفاده میشوند. در فایل snippets/serializers.py، یک Serializer برای مدل Snippet ایجاد کنید:
from rest_framework import serializers
from .models import Snippet
class SnippetSerializer(serializers.ModelSerializer):
class Meta:
model = Snippet
fields = ['id', 'title', 'code', 'created']
ایجاد Viewها
Viewها منطق API را پیادهسازی میکنند. DRF انواع مختلفی از Viewها را ارائه میدهد. در اینجا از ListAPIView و CreateAPIView استفاده میکنیم:
در فایل snippets/views.py:
from rest_framework import generics
from .models import Snippet
from .serializers import SnippetSerializer
class SnippetList(generics.ListAPIView):
queryset = Snippet.objects.all()
serializer_class = SnippetSerializer
class SnippetCreate(generics.CreateAPIView):
serializer_class = SnippetSerializer
تعریف URLها
URLها نقاط دسترسی به API را تعریف میکنند. در فایل myapi/urls.py، URLهای مربوط به برنامه snippets را تعریف کنید:
from django.urls import path, include
from snippets import views
urlpatterns = [
path('snippets/', views.SnippetList.as_view()),
path('snippets/create/', views.SnippetCreate.as_view()),
]
تست API
اکنون میتوانید API خود را تست کنید. سرور توسعه Django را اجرا کنید:
python manage.py runserver
سپس، با استفاده از یک ابزار مانند curl یا Postman، درخواستهای HTTP به URLهای تعریف شده ارسال کنید.
- برای دریافت لیست قطعههای کد، به آدرس
http://127.0.0.1:8000/snippets/یک درخواست GET ارسال کنید. - برای ایجاد یک قطعه کد جدید، به آدرس
http://127.0.0.1:8000/snippets/create/یک درخواست POST با بدنه JSON حاوی اطلاعات قطعه کد ارسال کنید.
به عنوان مثال، برای ایجاد یک قطعه کد جدید با استفاده از curl:
curl -X POST -H "Content-Type: application/json" -d '{"title": "مثال قطعه کد", "code": "print("Hello, world!")"}' http://127.0.0.1:8000/snippets/create/
تنظیمات احراز هویت
برای محافظت از API خود، میتوانید از مکانیزمهای احراز هویت DRF استفاده کنید. DRF از انواع مختلفی از احراز هویت پشتیبانی میکند، از جمله:
- Token Authentication
- Session Authentication
- OAuth2
برای فعال کردن Token Authentication، مراحل زیر را دنبال کنید:
- در فایل
myapi/settings.py، تنظیمات مربوط به Token Authentication را اضافه کنید: - Migration ها را اجرا کنید:
- یک توکن برای یک کاربر ایجاد کنید. میتوانید از رابط کاربری Django Admin یا از طریق کد پایتون این کار را انجام دهید.
- توکن را در هدر
Authorizationدرخواستهای HTTP خود قرار دهید.
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication',
],
}
python manage.py makemigrations python manage.py migrate
تنظیمات مجوزها
برای کنترل دسترسی به API خود، میتوانید از مکانیزمهای مجوز DRF استفاده کنید. DRF انواع مختلفی از مجوزها را ارائه میدهد، از جمله:
- IsAuthenticated
- IsAdminUser
- IsOwner
برای اعمال یک مجوز به یک View، ویژگی permission_classes را تنظیم کنید. به عنوان مثال، برای محدود کردن دسترسی به یک View فقط به کاربران احراز هویت شده:
class SnippetList(generics.ListAPIView):
queryset = Snippet.objects.all()
serializer_class = SnippetSerializer
permission_classes = [permissions.IsAuthenticated]
سفارشیسازی Serializerها و Viewها
DRF امکان سفارشیسازی Serializerها و Viewها را برای پاسخگویی به نیازهای خاص شما فراهم میکند. میتوانید Serializerها را با افزودن فیلدهای سفارشی، اعتبارسنجی دادهها و تغییر نحوه سریالسازی دادهها سفارشی کنید. همچنین میتوانید Viewها را با افزودن منطق سفارشی، تغییر نحوه پردازش درخواستها و پاسخها و تغییر نحوه نمایش دادهها سفارشی کنید.
نتیجهگیری
Django REST Framework یک ابزار قدرتمند و انعطافپذیر برای ساخت REST API با استفاده از Django پایتون است. با استفاده از DRF، میتوانید به سرعت و به آسانی APIهای پیچیده را ایجاد کنید که نیازهای برنامههای وب و موبایل شما را برآورده میکنند. این مقاله یک معرفی اولیه به DRF ارائه داد. برای یادگیری بیشتر، به مستندات رسمی DRF مراجعه کنید.

بدون دیدگاه