Django REST Framework ile Django'da RESTful API'ler Oluşturma
Django REST Framework (DRF), web API'leri oluşturmak için güçlü ve esnek bir araç takımıdır. Serileştiriciler, görünüm kümeleri ve kimlik doğrulama mekanizmaları gibi özellikleri kullanıma hazır olarak sunarak RESTful API'leri oluşturma sürecini basitleştirir.
Django REST Çerçevesini Kurma
Bir RESTful API oluşturmadan önce, Django REST Framework'ü yüklemeniz ve projenize eklemeniz gerekir. DRF'yi yüklemek için aşağıdaki komutu çalıştırın:
pip install djangorestframework
Daha sonra settings.py
dosyanızdaki INSTALLED_APPS
dizinine 'rest_framework' ekleyin:
INSTALLED_APPS = [
...,
'rest_framework',
]
Basit Bir API Oluşturma
Book
adlı basit bir model için bir API oluşturalım. İlk adım, modeli models.py
: içinde tanımlamaktır.
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=255)
author = models.CharField(max_length=255)
published_date = models.DateField()
isbn = models.CharField(max_length=13)
def __str__(self):
return self.title
Modeli tanımladıktan sonra veritabanı tablosunu oluşturmak için geçişleri çalıştırın:
python manage.py makemigrations
python manage.py migrate
Bir Serileştirici Oluşturma
DRF'deki serileştiriciler, Django modelleri gibi karmaşık veri tiplerini JSON'a dönüştürür. Book
modeli için bir serileştirici oluşturun:
from rest_framework import serializers
from .models import Book
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = '__all__'
Bina Görünümleri ve URL'ler
DRF, API görünümleri oluşturmak için iki ana yol sağlar: fonksiyon tabanlı görünümler ve sınıf tabanlı görünümler. Burada, APIView
: ile sınıf tabanlı görünümleri kullanırız.
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .models import Book
from .serializers import BookSerializer
class BookListCreateAPIView(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)
Daha sonra, bu görünüm için URL'leri urls.py
: dosyasında yapılandırın:
from django.urls import path
from .views import BookListCreateAPIView
urlpatterns = [
path('books/', BookListCreateAPIView.as_view(), name='book-list-create'),
]
API'yi test etme
Sunucu çalışırken, Postman veya curl gibi araçları kullanarak API'yi http://127.0.0.1:8000/books/
adresinde test edebilirsiniz. Bir GET isteği tüm kitapları alır ve bir POST isteği yeni bir kitap oluşturmanıza olanak tanır.
API'yi ViewSet'lerle geliştirme
Daha öz ve yeniden kullanılabilir kod için DRF'nin ViewSet
ve Router
'sını kullanabilirsiniz. API'yi ModelViewSet
kullanacak şekilde güncellemenin yolu:
from rest_framework.viewsets import ModelViewSet
from .models import Book
from .serializers import BookSerializer
class BookViewSet(ModelViewSet):
queryset = Book.objects.all()
serializer_class = BookSerializer
Daha sonra urls.py
: dosyasında yönlendiriciyi yapılandırın:
from rest_framework.routers import DefaultRouter
from .views import BookViewSet
router = DefaultRouter()
router.register(r'books', BookViewSet, basename='book')
urlpatterns = router.urls
Çözüm
Django REST Framework, sağlam ve esnek RESTful API'ler oluşturmayı kolaylaştırır. Serileştiriciler, görünümler ve yönlendiriciler kullanarak karmaşık veri modellerini kolaylıkla işleyen API'ler oluşturabilirsiniz. Bu temelle artık DRF'de özel izinler, sayfalama ve kimlik doğrulama gibi gelişmiş özellikleri keşfedebilirsiniz.