인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

길준님의 프로필 이미지
길준

작성한 질문수

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트

DRF강의 > JSON응답뷰 강의 에서 질문이 있습니다!

작성

·

174

1

DRF로 Post모델의 API를 설계할 때 router.register('posts', views.PostViewSet) 여기서 

2개의 url을 만들어준다고 하셔서 router.urls를 출력을 해봤습니다.

출력 결과 아래와 같이 나왔습니다. 

[
    1. <URLPattern '^post/$' [name='post-list']>, 
    2. <URLPattern '^post\.(?P<format>[a-z0-9]+)/?$' [name='post-list']>,

    3. <URLPattern '^post/(?P<pk>[^/.]+)/$' [name='post-detail']>,
    4. <URLPattern '^post/(?P<pk>[^/.]+)\.(?P<format>[a-z0-9]+)/?$' [name='post-detail']>,

    5. <URLPattern '^$' [name='api-root']>,
    6. <URLPattern '^\.(?P<format>[a-z0-9]+)/?$' [name='api-root']>
]

여기서 질문이 생겼습니다. 4번에서 posk/pk/format 이어야 할것같은데

왜 중간 \. 이 있는지 의문입니다...!!

답변 1

1

이진석님의 프로필 이미지
이진석
지식공유자

DRF의 DefaultRouter에서는 format_suffix_patterns를 통해서 해당 format 패턴이 추가된 urlpatterns를 생성해주고 있습니다. format_suffix_patterns 내에서 ".포맷" 의 구조로 URL을 선언하고 있기 때문에 그렇습니다. 포맷 인자가 확장자처럼 보이도록 의도한 것이죠.

  • /blog/posts/100/ 요청
  • /blog/posts/100.json 요청

혹은 /blog/posts/100/ 에 대해서 QueryString으로 /blog/posts/100/?format=json 으로 쓰실 수도 있습니다.

관련 공식문서 : https://www.django-rest-framework.org/api-guide/format-suffixes/

 

이진석님의 프로필 이미지
이진석
지식공유자

https://github.com/encode/django-rest-framework/blob/3.12.4/rest_framework/urlpatterns.py#L105

위 소스코드에 정의되어있습니다. :-)

길준님의 프로필 이미지
길준

작성한 질문수

질문하기