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.