본문 바로가기
Python 웹 프레임워크/Django REST framework 3.15

[DRF] Django REST Framework 특징 및 소개

by cogito21_python 2024. 7. 5.
반응형

Django REST Framework(DRF)은 Django 웹 프레임워크를 기반으로 한 강력하고 유연한 도구로, RESTful 웹 API를 쉽게 구축할 수 있도록 도와줍니다. DRF는 다양한 기능과 특징을 제공하여 개발자들이 효율적이고 확장 가능한 API를 만들 수 있도록 합니다. 

주요 특징

1. Serialization

  • 데이터베이스 모델과 Python 데이터 구조를 JSON, XML 등의 다양한 포맷으로 변환할 수 있습니다.
  • Serializer 클래스를 사용하여 데이터 검증과 변환을 간편하게 처리할 수 있습니다.

2. Authentication & Permissions

  • 다양한 인증 방법(BasicAuth, TokenAuth, SessionAuth 등)을 지원합니다.
  • 권한 관리를 통해 사용자별 접근 제어가 가능합니다.

3. Browsable API

  • API를 웹 브라우저에서 시각적으로 탐색하고 테스트할 수 있는 기능을 제공합니다.
  • 개발 및 디버깅 과정에서 매우 유용합니다.

4. Viewsets and Routers

  • Viewset을 사용하여 코드 중복을 줄이고, CRUD 기능을 간편하게 구현할 수 있습니다.
  • Router를 통해 URL 라우팅을 자동으로 처리할 수 있습니다.

5. Pagination

  • 대량의 데이터를 효율적으로 처리할 수 있도록 페이지네이션 기능을 제공합니다.
  • 기본 제공되는 다양한 페이지네이션 스타일(예: PageNumberPagination, LimitOffsetPagination 등)을 사용할 수 있습니다.

6. Filtering and Ordering

  • 필터링, 검색, 정렬 기능을 쉽게 구현할 수 있도록 도와줍니다.
  • Django의 ORM과 자연스럽게 통합되어 복잡한 쿼리도 간편하게 작성할 수 있습니다.

7. Throttling

  • API 사용량을 제어하고 제한할 수 있는 기능을 제공합니다.
  • 기본 제공되는 다양한 스로틀링 방법(예: UserRateThrottle, AnonRateThrottle 등)을 사용할 수 있습니다.

8. Versioning

  • API의 버전 관리를 쉽게 할 수 있는 기능을 제공합니다.
  • URL 패턴, 헤더 등을 통해 버전 관리를 할 수 있습니다.

Django REST Framework 소개

Django REST Framework는 Django의 강력한 기능을 확장하여 RESTful API 구축을 쉽게 만들어줍니다. 다음은 DRF의 일반적인 사용 예시입니다.

1. 설치 및 설정

pip install djangorestframework
# settings.py
INSTALLED_APPS = [
    ...
    'rest_framework',
]

2. Serializer 클래스 작성

from rest_framework import serializers
from myapp.models import MyModel

class MyModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = MyModel
        fields = '__all__'

3. Viewset 작성

from rest_framework import viewsets
from myapp.models import MyModel
from myapp.serializers import MyModelSerializer

class MyModelViewSet(viewsets.ModelViewSet):
    queryset = MyModel.objects.all()
    serializer_class = MyModelSerializer

4. Router 설정

from rest_framework.routers import DefaultRouter
from myapp.views import MyModelViewSet

router = DefaultRouter()
router.register(r'mymodel', MyModelViewSet)

urlpatterns = [
    ...
    path('api/', include(router.urls)),
]
반응형