출처: Django REST framework 공식 문서
Django Rest Framework은 파이썬 웹 프레임워크인 Django를 사용하여 RESTful API를 개발하는 데 필요한 도구와 기능을 제공하는 오픈소스 프레임워크입니다.
Django Rest Framework은 다음과 같은 기능을 제공합니다.
Serializer (시리얼라이저)
Django REST Framework의 가장 중요한 기능 중 하나로, 모델 데이터나 쿼리셋 등을 JSON 또는 XML과 같은 직렬화 가능한 데이터로 변환
할 수 있습니다. 반대로 JSON 또는 XML과 같은 직렬화 가능한 데이터를 파싱하여 모델 인스턴스나 쿼리셋으로 변환할 수 있습니다.
왜 이런 작업들이 필요할까요? DRF에서는 데이터를 저장할 때 Django의 Model을 통해 저장하게 됩니다. Django의 모델은 ORM으로 처리할 수 있는 **”파이썬 객체”**이며 클라이언트는 파이썬 객체를 해석할 수 없습니다.
그래서 JSON, XML과 같은 클라이언트 측에서 읽을 수 있는 문자열로 변환하여 보내주어야 하고 이때 변환하는 작업을 Serialize(직렬화)
라고 합니다. 반대로 JSON, XML 등의 문자열을 파이썬 객체로 변환하는 작업을 Deserialize(역 직렬화)
라고 합니다. DRF의 serialize에서는 직렬화, 역 직렬화 기능을 모두 갖추고 있습니다.
class UserSerializer(serializers.Serializer):
email = serializers.EmailField()
name = serializers.CharField(max_length=20)
created = serializers.DateTimeField()
def create(self, validated_data):
return User(**validated_data)
def update(self, instance, validated_data):
instance.email = validated_data.get('email', instance.email)
instance.name = validated_data.get('content', instance.content)
instance.created = validated_data.get('created', instance.created)
return instance
Django REST Framework에서는 기본적으로 함수 기반 뷰(Function Based View)와 클래스 기반 뷰(Class Based View)를 지원합니다. 뷰는 HTTP 요청을 받아서 데이터를 처리하고, HTTP 응답을 반환하는 역할을 합니다.
from rest_framework.decorators import api_view
from rest_framework.response import Response
@api_view(['POST'])
def create_user(request):
serializer = UserSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=201)
return Response(serializer.errors, status=400)
from rest_framework.views import APIView
from rest_framework.response import Response
class UserAPIView(APIView):
def post(self, request, format=None):
serializer = UserSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=201)
return Response(serializer.errors, status=400)