TIL#144 DRF ModelViewSet & APIView

Dasom·2021년 4월 1일
0

Django

목록 보기
24/34
post-thumbnail

DRF를 조금씩 공부하면서 가장 궁금했던 점이 언제 ModelViewSet을 쓰고 언제 APIView를 써야 하는지였다. 오늘 그부분에 대해 질문을 하였고 명쾌한 대답을 들었다😀
제일 큰 차이점은 URL이다.
예를 들어 게시물 api가 있다고 가정하자.
그렇다면 url은 이렇게 될 것이다.

/posts  # 게시글 리스트를 불러오거나 게시글을 생성하는 url
/posts/1  # 1번 게시글을 불러오거나 수정, 삭제하는 url

만약 이렇게 CRUD + list 가 다 필요하다면 ModelViewSet 을 쓰는 것이 좋다.
ModelViewSet은 CRUD와 list를 전부 제공한다.

class PostViewSet(viewsets.ModelViewSet):
    queryset = Post.objects.all()
    serializer_class = PostSerializer
    
    # GET Method ( list 를 가져옴 )
    def list(self, request):
        pass

    # POST Method
    def create(self, request):
        pass

    # GET Method ( 하나의 객체를 가져옴 )
    def retrieve(self, request, pk=None):
        pass

    # PUT Method
    def update(self, request, pk=None):
        pass

    # PATCH Method
    def partial_update(self, request, pk=None):
        pass

    # DELETE Method
    def destroy(self, request, pk=None):
        pass

이렇게 queryset과 serializer_class 가 공통적인 코드를 하나의 class 에서 처리할 수 있다. 또한 Router를 통해 하나의 url로 처리가 가능하다.

#. urls.py

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

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

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

이렇게 구현해주면 위의

/posts  # 게시글 리스트를 불러오거나 게시글을 생성하는 url
/posts/1  # 1번 게시글을 불러오거나 수정, 삭제하는 url

두 가지 url을 모두 충족하게 된다.

APIView 는 하나의 url에 대해서만 처리를 할 수 있기 때문에 굳이 두가지 url이 필요하지 않은 경우 사용한다. (UPDATE, DELETE 만 필요한 api, LIST만 필요한 api 등)

profile
개발자꿈나무🌲

0개의 댓글