[DRF]Router & ViewSet

박민하·2022년 9월 23일
0

DRF

목록 보기
1/9
post-thumbnail

공식문서 링크


✅ Router

  Router는 ViewSet에서 사용할 수 있는 기능으로, 기본적으로 제공하는 url에 view를 매핑할 수 있도록 해준다. url은 총 6개가 있다.

POST(create)
GET(list/retrieve)
PUT(update)
DELETE(destroy)
PATCH(partial_update)

✔ 예시

  DRF 공식문서의 SimpleRouter 예시다.

  • router = routers.SimpleRouter(): SimpleRouter 사용
  • router.register(r'users', UserViewSet): users라는 url에 UserViewSet 매핑

✔ 종류

  Router의 종류는 SimpleRouter, DefaultRouter 두 가지가 있다. 6개의 url이 만들어진다는 것은 동일하지만, DefaultRouter에만 존재하는 url이 2개가 있다.

1. API Root

  • 앱 이전의 root url
  • 위 공식문서 사진 상으로는 users 이전의 url에 해당된다.

2. format suffix

  • 응답 format을 접미사로 표현하는 기능(.json, .api)
    • 보통은 quary string으로 표현한다(/?format=json, /?format=api)

공식 문서에서 더 자세한 사항을 알 수 있다. GO

✅ View

  DRF에서는 View는 Views, Generic views, Viewsets 세 개로 나뉘어져 있다. ViewSet에는 ViewSets, GenericViewSet, ModelViewSet, ReadOnlyModelViewSet 네 가지 class가 있다. 공부할 때는 ModelViewSet을 먼저 보라는데 이유가 뭔지 알아보자.


cdrf.co

✔ 1. APIView

  View 클래스를 상속받아서 APIView를 만든다.

✔ 2. Generics

  APIView를 상속받아서 GenericAPIView를 만든다.

  1. GenericAPIView + CreateMixin = CreateAPIView
  2. GenericAPIView + ListMixin = ListAPIView
  3. GenericAPIView + RetrieveMixin = RetrieveAPIView
  4. GenericAPIView + UpdateMixin = UpdateAPIView
  5. GenericAPIView + DestroyMixin = DestroyAPIView
  • ListAPIView + CreateAPIView = ListCreateAPIView
  • RetrieveAPIView + UpdateAPIView + DestroyAPIView = RetrieveUpdateDestroyAPIView

CRUD와 DRF View 비교

CRUDDRF View설명HTTP Method
CreateCreate생성POST
ReadList다수의 레코드 읽기GET
ReadRetrieve하나의 레코드 읽기GET
UpdateUpdate수정UPDATE, PATCH
DeleteDestroy삭제DELETE

  GenericAPIView는 GetQuerySet이나 get object와 같은 테이블 처리 메서드가 있어서 이 메서드를 사용할거면 GenericAPIView를 상속받고, 새로 작성할거면 APIView를 상속받는다. Generic은 DB와 관련된 처리를 하는 View다.

✔ 3. ViewSets

  5종류의 GenericAPIView를 모두 조합해서 만든 것이 ModelViewSet이다. ViewSet을 사용하면 개발 초기에 테이블 내용을 간단히 확인해보기 좋다. 하지만 세부적인 커스텀을 하고싶다면 개별 View를 사용하는게 좋다.

✔ 정리

class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer

  이처럼 아주 짧은 코드로도 user 테이블에 대한 CRUD 기능이 모두 동작하는 이유는 CRUD기능이 포함된 view를 모두 조합해서 만든 ModelViewSet을 상속받았기 때문임을 알 수 있다. 그래서 DRF View를 공부할 때에는 5개의 Generic API view를 먼저 숙지 해두면 ModelViewSet는 자연스레 알게된다고 한다.

profile
backend developer 🐌

0개의 댓글