Erstellen von RESTful-APIs in Django mit dem Django REST Framework

Django REST Framework (DRF) ist ein leistungsstarkes und flexibles Toolkit zum Erstellen von Web-APIs. Es vereinfacht den Prozess der Erstellung von RESTful-APIs und bietet sofort einsatzbereite Funktionen wie Serialisierer, Viewsets und Authentifizierungsmechanismen.

Einrichten des Django REST Frameworks

Bevor Sie eine RESTful-API erstellen können, müssen Sie das Django REST Framework installieren und es Ihrem Projekt hinzufügen. Führen Sie den folgenden Befehl aus, um DRF zu installieren:

pip install djangorestframework

Fügen Sie dann 'rest_framework' zu INSTALLED_APPS in Ihrer Datei settings.py hinzu:

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

Erstellen einer einfachen API

Erstellen wir eine API für ein einfaches Modell namens Book. Der erste Schritt besteht darin, das Modell in models.py zu definieren:

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

Führen Sie nach der Definition des Modells Migrationen aus, um die Datenbanktabelle zu erstellen:

python manage.py makemigrations
python manage.py migrate

Erstellen eines Serialisierers

Serialisierer in DRF konvertieren komplexe Datentypen wie Django-Modelle in JSON. Erstellen Sie einen Serialisierer für das Modell Book:

from rest_framework import serializers
from .models import Book

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

Erstellen von Ansichten und URLs

DRF bietet zwei Hauptmethoden zum Erstellen von API-Ansichten: funktionsbasierte Ansichten und klassenbasierte Ansichten. Hier verwenden wir klassenbasierte Ansichten mit APIView:

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)

Konfigurieren Sie als Nächstes URLs für diese Ansicht in urls.py:

from django.urls import path
from .views import BookListCreateAPIView

urlpatterns = [
    path('books/', BookListCreateAPIView.as_view(), name='book-list-create'),
]

Testen der API

Wenn der Server läuft, können Sie die API unter http://127.0.0.1:8000/books/ mit Tools wie Postman oder curl testen. Eine GET-Anfrage ruft alle Bücher ab, und eine POST-Anfrage ermöglicht Ihnen, ein neues Buch zu erstellen.

Erweitern der API mit ViewSets

Für prägnanteren und wiederverwendbaren Code können Sie DRFs ViewSet und Router verwenden. So aktualisieren Sie die API, um ein ModelViewSet zu verwenden:

from rest_framework.viewsets import ModelViewSet
from .models import Book
from .serializers import BookSerializer

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

Konfigurieren Sie dann den Router in urls.py:

from rest_framework.routers import DefaultRouter
from .views import BookViewSet

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

urlpatterns = router.urls

Abschluss

Mit dem Django REST Framework können Sie ganz einfach robuste und flexible RESTful-APIs erstellen. Mithilfe von Serialisierern, Ansichten und Routern können Sie APIs erstellen, die problemlos mit komplexen Datenmodellen umgehen. Auf dieser Grundlage können Sie nun erweiterte Funktionen wie benutzerdefinierte Berechtigungen, Paginierung und Authentifizierung in DRF erkunden.