Django REST Framework를 사용하여 Django에서 RESTful API 만들기

Django REST Framework(DRF)는 웹 API를 구축하기 위한 강력하고 유연한 툴킷입니다. RESTful API를 만드는 과정을 간소화하고, 시리얼라이저, 뷰셋, ​​인증 메커니즘과 같은 기능을 바로 제공합니다.

Django REST 프레임워크 설정

RESTful API를 만들기 전에 Django REST Framework를 설치하고 프로젝트에 추가해야 합니다. 다음 명령을 실행하여 DRF를 설치합니다.

pip install djangorestframework

그런 다음 settings.py 파일의 INSTALLED_APPS에 'rest_framework'을 추가합니다.

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

간단한 API 만들기

Book라는 간단한 모델에 대한 API를 만들어 보겠습니다. 첫 번째 단계는 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

모델을 정의한 후 마이그레이션을 실행하여 데이터베이스 테이블을 생성합니다.

python manage.py makemigrations
python manage.py migrate

직렬화기 만들기

DRF의 직렬화기는 Django 모델과 같은 복잡한 데이터 유형을 JSON으로 변환합니다. Book 모델에 대한 직렬화기를 만듭니다.

from rest_framework import serializers
from .models import Book

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

뷰 및 URL 구축

DRF는 API 뷰를 만드는 두 가지 주요 방법을 제공합니다. 함수 기반 뷰와 클래스 기반 뷰입니다. 여기서는 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)

다음으로, urls.py에서 이 뷰에 대한 URL을 구성합니다.

from django.urls import path
from .views import BookListCreateAPIView

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

API 테스트

서버가 실행 중이면 Postman이나 curl과 같은 도구를 사용하여 http://127.0.0.1:8000/books/에서 API를 테스트할 수 있습니다. GET 요청은 모든 책을 검색하고 POST 요청은 새 책을 만들 수 있게 해줍니다.

ViewSets를 사용하여 API 향상

더 간결하고 재사용 가능한 코드를 위해 DRF의 ViewSetRouter을 사용할 수 있습니다. API를 업데이트하여 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

그런 다음 urls.py에서 라우터를 구성합니다.

from rest_framework.routers import DefaultRouter
from .views import BookViewSet

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

urlpatterns = router.urls

결론

Django REST Framework를 사용하면 강력하고 유연한 RESTful API를 쉽게 만들 수 있습니다. 직렬화기, 뷰 및 라우터를 사용하면 복잡한 데이터 모델을 쉽게 처리하는 API를 빌드할 수 있습니다. 이 기반을 통해 이제 DRF에서 사용자 지정 권한, 페이지 매김 및 인증과 같은 고급 기능을 탐색할 수 있습니다.