Opprette RESTful APIer i Django med Django REST Framework

Django REST Framework (DRF) er et kraftig og fleksibelt verktøysett for å bygge web-APIer. Det forenkler prosessen med å lage RESTful APIer, og gir funksjoner som serialiseringsprogrammer, visningssett og autentiseringsmekanismer ut av esken.

Sette opp Django REST Framework

Før du kan lage en RESTful API, må du installere Django REST Framework og legge den til i prosjektet ditt. Kjør følgende kommando for å installere DRF:

pip install djangorestframework

Deretter legger du til 'rest_framework' i INSTALLED_APPS i filen settings.py:

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

Opprette en enkel API

La oss lage et API for en enkel modell kalt Book. Det første trinnet er å definere modellen i models.py:

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

Etter å ha definert modellen, kjør migreringer for å lage databasetabellen:

python manage.py makemigrations
python manage.py migrate

Opprette en Serializer

Serialiseringsprogrammer i DRF konverterer komplekse datatyper som Django-modeller til JSON. Lag en serializer for Book-modellen:

from rest_framework import serializers
from .models import Book

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

Bygge visninger og nettadresser

DRF gir to hovedmåter for å lage API-visninger: funksjonsbaserte visninger og klassebaserte visninger. Her bruker vi klassebaserte visninger med 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)

Deretter konfigurerer du nettadresser for denne visningen i urls.py:

from django.urls import path
from .views import BookListCreateAPIView

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

Tester API

Når serveren kjører, kan du teste API-en på http://127.0.0.1:8000/books/ ved å bruke verktøy som Postman eller curl. En GET-forespørsel henter alle bøkene, og en POST-forespørsel lar deg lage en ny bok.

Forbedre API med ViewSets

For mer kortfattet og gjenbrukbar kode kan du bruke DRFs ViewSet og Router. Slik oppdaterer du API til å bruke et ModelViewSet:

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

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

Deretter konfigurerer du ruteren i urls.py:

from rest_framework.routers import DefaultRouter
from .views import BookViewSet

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

urlpatterns = router.urls

Konklusjon

Django REST Framework gjør det enkelt å lage robuste og fleksible RESTful APIer. Ved å bruke serialiseringsprogrammer, visninger og rutere kan du bygge APIer som enkelt håndterer komplekse datamodeller. Med dette grunnlaget kan du nå utforske avanserte funksjoner som egendefinerte tillatelser, paginering og autentisering i DRF.