Django REST Framework/DRF 일반

[DRF] settings.py 자주 사용 되는 구성 옵션의 정리

bluebamus 2024. 1. 5.

 1. DRF를 설치하고 설정해 줘야 하는 필수 설정

   - app 추가

INSTALLED_APPS = [
	...
    'rest_framework',
]

 

   - REST_FRAMEWORK 설정 추가

      - 기본 권한, 인증 클래스, 페이지네이션 등

         - 기본 권한 클래스 : IsAuthenticated (인증된 사용자만 api에 액세서 가능)

         - 인증 클래스 : SessionAuthentication, TokenAuthentication

         - 페이지네이션 및 페이지 크기

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',
    ],
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.TokenAuthentication',
    ],
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 5
}

 

   - API 버전 관리

REST_FRAMEWORK = {
    'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.URLPathVersioning',
    'DEFAULT_VERSION': 'v1',
}

 

   - URL 경로 버전 관리

      - URL 경로 버전 관리는 URL 자체에 버전 번호를 포함하는 방식입니다.

from django.urls import path
from .views import MyModelViewSet

urlpatterns = [
    path('v1/mymodels/', MyModelViewSet.as_view({'get': 'list'}), name='mymodel-list'),
    # 다른 뷰와 뷰셋에 대한 추가 URL 패턴을 추가합니다
]
# views.py
class UserListView(APIView):
    def get(self, request, *args, **kwargs):
        if request.version == 'v1':
            # 버전 1에 대한 로직
        elif request.version == 'v2':
            # 버전 2에 대한 로직

 

   - 쿼리 매개변수 버전 관리

      - 쿼리 매개변수 버전 관리는 URL의 쿼리 매개변수로 버전 번호를 포함하는 방식입니다.

      - 이 설정을 사용하면 /mymodels/?version=v1과 같은 API 엔드포인트에 액세스하여 버전별 동작을 트리거할 수 있습니다.

from django.urls import path
from .views import MyModelViewSet

urlpatterns = [
    path('mymodels/', MyModelViewSet.as_view({'get': 'list'}), name='mymodel-list'),
    # Add additional URL patterns for other views and viewsets
]
from rest_framework import viewsets
from rest_framework.response import Response

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

    def list(self, request, *args, **kwargs):
        version = request.query_params.get('version', 'default')

        # Implement version-specific behavior
        if version == 'v1':
            # Handle version 1 logic
            queryset = MyModel.objects.filter(...)  # Your version 1 queryset
            serializer = MyModelSerializer(queryset, many=True)
            return Response(serializer.data)
        else:
            # Default behavior
            return super().list(request, *args, **kwargs)

 

   - 사용자 정의 헤더 버전 관리

      - 사용자 정의 헤더 버전 관리는 HTTP 요청의 헤더에 버전 번호를 포함하는 방식입니다.

      - views.py에 다음과 같이 코드를 업데이트 한다.

API_VERSION_HEADER = 'X-API-Version'

class MyModelViewSet(viewsets.ModelViewSet):
    def list(self, request, *args, **kwargs):
        version = request.META.get(API_VERSION_HEADER)
        # 버전 번호를 처리하고 그에 따라 작업을 수행합니다
        # ...

 

 2. 자주 사용 되는 구성 옵션

   - DEFAULT_RENDERER_CLASSES : client에게 전달하는 기본 렌더러 클래스 지정, API의 응답이 어떤 형식으로 직렬화 될지를 결정한다. 기본은 json이다.

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': [
        'rest_framework.renderers.JSONRenderer',
        'rest_framework.renderers.BrowsableAPIRenderer',
    ]
}

 

   - DEFAULT_AUTHENTICATION_CLASSES : 요청에 대한 인증에 사용되는 기본 인증 클래스

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.TokenAuthentication',
    ]
}

 

   - DEFAULT_PERMISSION_CLASSES : 권한 부여에 사용되는 기본 권한 클래스, API 뷰에 적용되는 접근 제어 규칙을 결정한다.

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',
    ]
}

 

   - DEFAULT_PAGINATION_CLASS : API 응답에 사용되는 페이지네이션 클래스 및 API 결과가 페이지로 나뉘어 표시되는 방식 및 크기를 제어한다.

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 10,
}

 

   - DEFAULT_FILTER_BACKENDS : API 데이터 필터링에 사용되는 기본 필터 백엔드를 정의하며 필터링 옵션을 정의할 수 있다.

REST_FRAMEWORK = {
    'DEFAULT_FILTER_BACKENDS': [
        'rest_framework.filters.SearchFilter',
        'rest_framework.filters.OrderingFilter',
    ]
}

 

   - DEFAULT_THROTTLE_CLASSES : API를 이용하는 client가 요청을 하는 수 및 속도를 제한할 수 있는 클래스를 설정한다.

REST_FRAMEWORK = {
    'DEFAULT_THROTTLE_CLASSES': [
        'rest_framework.throttling.AnonRateThrottle',
        'rest_framework.throttling.UserRateThrottle',
    ],
    'DEFAULT_THROTTLE_RATES': {
        'anon': '100/day',
        'user': '1000/day',
    }
}

 

 

 

 - 참고 : 

https://wikidocs.net/197561

 

01) Django REST Framework 설정하기

[TOC] Django REST Framework (DRF)에 대한 개요와 이점을 제공한 후, 이제 DRF를 Django 프로젝트에 설정하는 작업에 대해 알아보겠습니다. 이 과…

wikidocs.net

 

댓글