장고

Django Rest Framework

content0474 2024. 12. 19. 20:33

1. DRF
DRF는 Django 기반의 강력한 REST API를 만들 수 있도록 도와주는 프레임워크임
빠르고 간단하게 API 개발이 가능하며 인증, 권한, 페이징, 필터링 등 다양한 기능을 지원함

 

2. DRF를 사용하는 이유
기본 Django보다 RESTful API 설계와 구현이 훨씬 쉬움
직렬화(Serialization)를 자동화하여 데이터를 JSON 형태로 쉽게 변환 가능함
인증 및 권한 관리 기능이 강력하고 확장성이 높음
다양한 Response 형식과 커스텀 가능한 뷰 제공

 

3. 주요 구성 요소
Serializer: 데이터 직렬화 및 역직렬화를 담당함
ViewSet: CRUD 로직을 간단하게 작성할 수 있도록 함
Router: URL 라우팅을 간단하게 처리함
Permission: 권한 관리로 API 접근을 제어함
Authentication: 인증을 통해 사용자 식별을 처리함

 

4. Serializer와 ModelSerializer
Serializer는 Python 객체를 JSON으로 변환하거나 그 반대로 변환함
ModelSerializer는 Django 모델과 연동하여 직렬화를 자동화해줌

from rest_framework import serializers
from .models import Post

class PostSerializer(serializers.ModelSerializer):
    class Meta:
        model = Post
        fields = '__all__'


5. ViewSet과 Router
ViewSet은 HTTP 메서드(CRUD)를 처리하는 클래스를 간단하게 작성할 수 있음
Router는 URL 라우팅을 자동으로 처리해주는 역할을 함

from rest_framework import viewsets
from .models import Post
from .serializers import PostSerializer

class PostViewSet(viewsets.ModelViewSet):
    queryset = Post.objects.all()
    serializer_class = PostSerializer

# urls.py
from rest_framework.routers import DefaultRouter
from .views import PostViewSet

router = DefaultRouter()
router.register(r'posts', PostViewSet)

urlpatterns = [
    path('', include(router.urls)),
]



6. 권한과 인증 설정
DRF는 기본적으로 여러 권한 클래스와 인증 방식을 제공
예를 들어 IsAuthenticated를 사용하면 인증된 사용자만 API를 사용할 수 있음

from rest_framework.permissions import IsAuthenticated

class SecureViewSet(viewsets.ModelViewSet):
    permission_classes = [IsAuthenticated]


7. 페이징 및 필터링
DRF는 대규모 데이터에서 페이징 처리를 쉽게 할 수 있도록 PageNumberPagination과 같은 페이징 클래스를 제공함
필터링은 django-filter 패키지와 함께 사용하여 간단히 구현할 수 있음

from rest_framework.pagination import PageNumberPagination

class CustomPagination(PageNumberPagination):
    page_size = 10

 

8. 테스트 및 디버깅
DRF는 API 요청 및 응답을 쉽게 테스트할 수 있는 API 브라우저를 기본 제공
Postman이나 Swagger와 연동하여 API 테스트 및 문서화도 가능

 

9. 확장성
DRF는 커스텀 Serializer, View, Permission, Authentication 등을 지원하므로 필요에 따라 확장이 쉬움
기업 수준의 복잡한 RESTful API도 구현 가능