🚀 Django REST Framework (DRF) 기초 정리
Django REST Framework(DRF)는 Django 기반의 강력한 RESTful API 개발 라이브러리입니다.
- 직렬화(Serialization)
- API 뷰(Views)
- 인증(Authentication), 권한(Permissions), 라우팅(Router) 등 핵심 기능을 내장하여 웹 API 구현을 간단하고 강력하게 만들어줍니다.
🧩 Serializer란?
1. 개념
Serializer는 모델 인스턴스를 JSON으로 변환하거나, 반대로 JSON 데이터를 모델 인스턴스로 변환하는 역할을 합니다.
- 직렬화(Serialize): 객체 → JSON
- 역직렬화(Deserialize): JSON → 객체
2. 사용법
from rest_framework import serializers
from .models import MyModel
class MyModelSerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = '__all__'
3. 주요 메서드
- to_representation(instance): DB → JSON
- create(validated_data): 객체 생성
- update(instance, validated_data): 객체 수정
- validate(self, attrs): 전체 필드 유효성 검사 커스터마이징
🔍 View 종류
1. APIView
- 가장 기본적인 방식
- get(), post(), put() 등을 직접 정의
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
class MyAPIView(APIView):
def get(self, request):
return Response({"message": "Hello, World!"})
def post(self, request):
return Response(request.data, status=status.HTTP_201_CREATED)
2. Generic Views
- CRUD 기능을 미리 구현해둔 클래스 뷰
from rest_framework import generics
class MyModelListCreateView(generics.ListCreateAPIView):
queryset = MyModel.objects.all()
serializer_class = MyModelSerializer
- ListCreateAPIView: GET + POST
- RetrieveUpdateDestroyAPIView: GET(단일) + PUT + DELETE
3. ViewSet
- 하나의 클래스에 CRUD를 모두 정의할 수 있음
- 라우터와 함께 사용 가능
from rest_framework import viewsets
class MyModelViewSet(viewsets.ModelViewSet):
queryset = MyModel.objects.all()
serializer_class = MyModelSerializer
🌐 URL 연결 - Router
DefaultRouter 사용 예시
from rest_framework.routers import DefaultRouter
from .views import MyModelViewSet
router = DefaultRouter()
router.register(r'mymodels', MyModelViewSet)
urlpatterns = [
path('', include(router.urls)),
]
- ViewSet + Router → URLConf 자동 생성
🔐 권한(Permissions) & 인증(Authentication)
1. Permissions (접근 제어)
from rest_framework.permissions import IsAuthenticated
class MyAPIView(APIView):
permission_classes = [IsAuthenticated]
- AllowAny: 모두 허용
- IsAuthenticated: 로그인한 사용자만
- IsAdminUser: 관리자만
2. Authentication (인증 방식)
from rest_framework.authentication import TokenAuthentication
class MyAPIView(APIView):
authentication_classes = [TokenAuthentication]
permission_classes = [IsAuthenticated]
- SessionAuthentication (기본값)
- TokenAuthentication
- OAuth2 / JWT 등 외부 인증 방식도 가능
⚡ Throttling (요청 제한)
DRF는 기본적으로 요청 횟수를 제한하는 기능을 제공하여 API 남용을 방지합니다.
from rest_framework.throttling import UserRateThrottle
class MyAPIView(APIView):
throttle_classes = [UserRateThrottle]
- 전역 설정 가능 (settings.py)
- 사용자별, 익명 사용자별 요청 제한 설정 가능
📚 참고 자료
- Django DRF 공식 문서: https://www.django-rest-framework.org/
- DRF 인증/권한: https://www.django-rest-framework.org/api-guide/permissions/
- DRF ViewSet: https://www.django-rest-framework.org/api-guide/viewsets/
- DRF Serializer: https://www.django-rest-framework.org/api-guide/serializers/