• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

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

21.10.25 14:10 작성 조회수 122

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

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