반응형
목표
- 수정과 삭제기능 구현하기
- 라우터는 왜 사용하는가?
목적
- 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는 무엇이고 어떻게 사용하는가?
레퍼런스
반응형
'Log > Today' 카테고리의 다른 글
간단한 서버와 API는 금방 만들 수 있게 되었다. (0) | 2022.02.03 |
---|---|
Bidasks, Suulgo 프로젝트 리펙토링 (0) | 2022.02.02 |
DRF를 사용하여 간단한 CRUD 구현해보기 (0) | 2022.01.28 |
DRF Tutorial 끝내기 (0) | 2022.01.27 |
메모리에서 파일로 선입선출이 아닌 벌크 이동 (0) | 2022.01.19 |