DRF(Django REST Framework)

Soobin Kim·2023년 8월 12일

공부

목록 보기
1/15

Django REST Framework란

Django REST Framework(DRF)는 파이썬 웹 프레임워크인 Django를 기반으로 웹 API를 손쉽게 개발할 수 있도록 도와주는 도구다. 이 프레임워크는 복잡한 작업을 단순화하고 일관된 코드 패턴을 제공하여 RESTful API를 생성하고 관리하는 데 도움을 준다.


주요 기능

1. 시리얼라이저(Serializer)

DRF는 Django 모델 데이터를 다양한 형식으로 직렬화하거나 역직렬화할 수 있는 시리얼라이저를 제공한다. 이를 통해 데이터를 JSON, XML 등으로 변환하거나 역변환할 수 있다.

2. 클래스 기반 뷰(Class-Based Views)

DRF는 클래스 기반 뷰를 제공하여 API 로직을 구조화하고 재사용 가능한 코드를 작성할 수 있게 한다. 이를 통해 API 엔드포인트 구현이 간결하고 체계적으로 이루어진다.

3. 인증과 권한 관리

다양한 인증 방식과 권한 제어 기능을 제공하여 API 엔드포인트의 보안을 강화한다.

4. 라우팅(Routing)

URL 라우팅을 간소화하여 URL 패턴을 자동으로 생성하고, 뷰와 URL 간의 매핑을 단순화한다.

5. 검색과 필터링

데이터를 검색하고 필터링하여 원하는 데이터만 손쉽게 조회할 수 있는 기능을 제공한다.

6. 페이징(Pagination)

대량의 데이터를 처리할 때 유용한 페이징 기능을 지원한다.

7. 뷰셋(ViewSets)

CRUD 작업을 통합하고 최소한의 설정만으로 관련 작업을 수행할 수 있는 기능을 제공한다.

8. API 문서 자동 생성

기본적인 API 문서를 자동으로 생성하며, API 엔드포인트에 대한 정보와 예제를 제공한다.


주요 클래스 및 함수

1. rest_framework.serializers

시리얼라이저는 Django 모델 데이터를 직렬화 및 역직렬화하는 데 사용된다. 주로 JSON 형식을 처리하지만, XML 등 다양한 형식도 지원한다.

from rest_framework import serializers
from .models import Review

class ReviewSerializer(serializers.ModelSerializer):
    class Meta:
        model = Review
        fields = ('id', 'title', 'content', 'updated_at')
from rest_framework.views import APIView
from rest_framework.response import Response
from .models import Review
from .serializers import ReviewSerializer

class ReviewList(APIView):
    def get(self, request):
        reviews = Review.objects.all()
        serializer = ReviewSerializer(reviews, many=True)
        return Response(serializer.data)

    def post(self, request):
        serializer = ReviewSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=201)
        return Response(serializer.errors, status=400)

2. rest_framework.urlpatterns.format_suffix_patterns

format_suffix_patterns를 사용하면 URL에 접미사를 추가해 원하는 응답 형식을 지정할 수 있다. 예를 들어, URL에 .json 또는 .xml을 추가하여 다양한 데이터 형식으로 응답을 받을 수 있다.

from rest_framework.urlpatterns import format_suffix_patterns
from django.urls import path
from . import views

urlpatterns = [
    path('comments/', views.CommentList.as_view()),
]

urlpatterns = format_suffix_patterns(urlpatterns, allowed=['json', 'html'])

3. rest_framework.views.APIView

APIView는 RESTful API의 클래스 기반 뷰를 생성할 수 있도록 도와주는 클래스다. HTTP 메서드(GET, POST, PUT, DELETE 등)에 따라 엔드포인트의 동작을 정의할 수 있다.

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated

class UserList(APIView):
    permission_classes = [IsAuthenticated]

    def get(self, request):
        users = [{'id': 1, 'name': 'Alice'}, {'id': 2, 'name': 'Bob'}]
        return Response(users)

4. rest_framework.response.Response

Response는 API 응답을 생성할 때 사용되는 클래스다. Django의 HttpResponse와 유사하지만, 직렬화된 데이터를 기반으로 RESTful API 응답을 처리하는 데 최적화되어 있다.

from rest_framework.response import Response
from rest_framework.views import APIView

class ExampleView(APIView):
    def get(self, request):
        data = {'message': 'Hello, World!'}
        return Response(data, status=200)

요약

Django REST Framework는 시리얼라이저, 클래스 기반 뷰, 인증 및 권한 관리, 라우팅 등 다양한 기능을 제공하여 RESTful API 개발을 간편하고 체계적으로 수행할 수 있게 한다.

1개의 댓글

comment-user-thumbnail
2023년 8월 12일

좋은 정보 감사합니다

답글 달기