Log/Today

DRF에서 라우터는 왜 사용하는가?

daco2020 2022. 1. 29. 16:55
반응형

목표 

  • 수정과 삭제기능 구현하기
  • 라우터는 왜 사용하는가?

 

목적

  • DRF로 간단한 CRUD를 구현하여 기본 구조를 익히고자 함
  • DRF에서 router를 왜 사용하고 어떻게 사용하는지 이해하기 위함

 

결과

  • viewset과 serializer를 이용하여 수정과 삭제 기능 구현 완료
    (사실상 어제 완료가 된 것이었으나 uri에 '/'의 위치가 잘못되어 작동하지 않았던 것임)

  • router를 사용하는 이유
    • viewset과 연계하여 url의 하드코딩을 막을 수 있다.
    • as_view를 통해 각 request method마다 api를 연결시켜주었다면 router는 이를 알아서 연결해줌.
message_list = MessageViewSet.as_view({
        'get': 'list',
        'post': 'create',
    })

message_detail = MessageViewSet.as_view({
    'get': 'retrieve',
    'put': 'update',
    'patch': 'partial_update',
    'delete': 'destroy'
})

urlpatterns = [
    path('/message', message_list),
    path('/message/<int:pk>', message_detail),
]

이처럼 하나의 veiwset을 list와 detail, 두 가지로 endpoint를 지정해주어야 하지만,

 

아래처럼 router를 사용하면 간단하게 하나로 줄일 수 있다.

router = DefaultRouter(trailing_slash=False)
router.register(r'/message', MessageViewSet, basename='message')

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

 

 

생각

  • 튜토리얼 할 때에는 뭔지 모르고 그냥 따라했는데 실제 문제를 해결하려고 찾아보고 계속 반복하면서 조금씩 이해가 되는 것 같다.
  • 현재로서는 큰 흐름만 이해했고 세부적인 원리와 기능들은 직접 사용해보면서 익혀야겠다.
  • 그리고 viewset의 내부 코드를 살펴보다가 발견한 'get_object' 에 대해서도 공부가 필요해보인다.

 

앞으로

  • serializer와 viewset의 정확한 용도와 쓰임새는 무엇인가?
  • APIView과 @apiview의 차이는 무엇인가?
  • genericviews와 viewset의 차이는 무엇인가? 
  • get_object는 무엇이고 어떻게 사용하는가?

 

 

 


 

 

 

레퍼런스

 

 

 

 

반응형