본문 바로가기
python/django

파이썬으로 백엔드 서비스 개발하기 2편: django rest framework란?

by kimjunhee9339 2024. 5. 20.

Django REST Framework (DRF)는 Django를 위한 강력하고 유연한 도구로, RESTful API를 쉽게 개발할 수 있도록 도와준다. DRF는 Django의 기능을 확장하여, API를 신속하게 구축하고 유지보수할 수 있게 해준다.

DRF icon

하기전에...

settings.py의 INSTALLED_APPS에 'rest_framework'를 추가해주어야한다.

주요 특징

1. Serializer: 데이터베이스 모델과 JSON 같은 데이터 형식 간의 변환을 간편하게 해준다.

# serializers.py
from rest_framework import serializers
from .models import MyModel

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

 

2. Views and ViewSets: APIView를 활용하여 API요청과 응답을 하기 쉽게 도와주고 그외에 다양한 View들이 존재한다. 이러한 View들을 상속하거나 데코레이션을 이용하여 작성하면 된다. ViewSet이란 것도 있는데, CRUD과정을 쉽게 만들어준다.

# views.py
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .models import Item
from .serializers import ItemSerializer

class ItemList(APIView):
    def get(self, request):
        items = Item.objects.all()
        serializer = ItemSerializer(items, many=True)
        return Response(serializer.data)
    
    def post(self, request):
        serializer = ItemSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
# views.py
from rest_framework import viewsets
from .models import MyModel
from .serializers import MyModelSerializer

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

3. routers: 주로 viewset을 사용할때 쓰게 될텐데 라우팅을 편리하게 해준다.

4. Authentication and Permissions: 다양한 인증 방법을 지원한다. 기본 인증(세션, 토큰)뿐만 아니라 OAuth, JWT 등 다양한 인증 방식을 사용할 수 있습니다. 권한 관리를 통해 특정 사용자만 접근할 수 있도록 설정할 수 있다.

 

다음과 같은 특징들이 있고 필자는 요청 중간에 다른 작업을 받는게 많이서 주로 APIView를 쓴다. (다른 view와 viewset에 비해 비교적 원시적이지만 가장 유연하다고 생각한다.)

'python > django' 카테고리의 다른 글

파이썬으로 백엔드 서비스 개발하기 1편: django란?  (0) 2024.05.20