Django, Flask/🔫 Django REST framework (DRF)

DRF ViewSet : ModelViewSet로 ViewSet 맛보기

DarrenKwonDev 2020. 6. 16. 20:16

 

 

(https://www.django-rest-framework.org/api-guide/viewsets/#modelviewset)

 

Viewsets - Django REST framework

viewsets.py After routing has determined which controller to use for a request, your controller is responsible for making sense of the request and producing the appropriate output. — Ruby on Rails Documentation Django REST framework allows you to combine

www.django-rest-framework.org

 

Viewset 중 ModelViewSet을 이용해볼까 합니다.

 

viewsets는 그냥 다음과 같이 사용하면 됩니다. app 단위에서 따로 viewsets.py를 만들어줘서 정의했습니다.

# rooms/viewsets.py

from rest_framework import viewsets
from .models import Room
from .serializers import BigRoomSerializer


class RoomViewsets(viewsets.ModelViewSet):

    queryset = Room.objects.all()
    serializer_class = BigRoomSerializer

 

viewset을 이용하려면 urls.py에도 손을 좀 봐야 합니다.

 

일반적으로 class based view는 urls.py를 다음과 같이 설정했습니다.

from django.urls import path, include
from . import views

app_name = "rooms"

urlpatterns = [
    path("list/", views.ListRoomsView.as_view()),
    path("<int:pk>/", views.SeeRoomView.as_view()),
]

 

그러나 viewset을 이용할 때는 다음과 같이 사용합니다.

from rest_framework.routers import DefaultRouter
from django.urls import path, include
from . import viewsets

app_name = "rooms"

router = DefaultRouter()
router.register("", viewsets.RoomViewsets, basename="rooms")

urlpatterns = router.urls

 

작성한 후 살펴보면, 자동으로 pagination, POST 폼 등이 생성된 것을 볼 수 있습니다. 쉽게 말해 자동으로 CURD를 모두 구현해주었습니다.

 

ViewSet을 이용하는 것은 쉽고 빠르게 rest api를 구성하는데 도움을 주지만 추상화의 정도가 너무 높습니다.

기본적인 것들을 배운 후에 이용하는 것이 좋습니다.