본문 바로가기
source-code/Django

Django Rest Framework _ APIView 사용하기

by mattew4483 2021. 1. 22.
728x90
반응형

지난번에는 @api_view를 통해 DRF에서 함수형 뷰를 작성해보았다.

오늘은 APIView를 상속받아 클래스형 뷰를 작성해보자!


1. 모델 생성

기존과 똑같다!

2. Serializer 생성

둘 다 똑같다 !

3. view 작성

views.py

APIView라는 녀석을 import! 다른 건 지난번과 똑같다.

 

여기서, 왜 APIView를 사용하면 좋을까?

일단 클래스형이기 때문에 공통적인 함수들의 재사용이 가능하다.

또한 이를 통해 같은 코드를 재사용해서는 안된다는 DRY 정책에 맞게 코드를 작성하기도 쉬워진다.

 

views.py

쨔잔. 그런데 뭔가 익숙해 보인다?

사실 APIView를 상속받아 클래스형 뷰로 적었지만...

오버 라이딩 시 메소드 명이 각 HTTP요청의 메소드 명과 똑같다! 이렇게 친절할 수가!

 

즉 함수형에서 @api_view를 통해 HTTP 메소드를 지정해준 것처럼,

APIView에서는 동일한 이름의 내부 메소드를 정의해주면 되는 것. 덕분에 코드 흐름도 이해하기 쉽다!

 

그런데 여기서, format=None의 정체는? url에서 알아보자.

4. url 작성

urls.py

클래스형 뷰를 작성했으니 .as_view()를 붙여주면 된다!

 

얼레, 그런데 여기도 이상한 녀석이 있다.

format_suffix_patterns(urlpatterns) ← 너는 누구니?

우리의 친구 django에게 물어보자.

 

더보기

웹 API의 일반적 패턴은 URL에서 파일 이름 확장자를 사용하여 특정 미디어임을 알려주는 것이다.

예를 들어'http://example.com/api/users.json' 은 JSON표현을 지칭하는 것!

그러나 이러한 패턴은 오류가 발생하기 쉽고 DRY원칙에도 어긋난다.

따라서 REST framework는 이러한 형식 접미사 패턴을 URLconf에 추가하는 방법을 제공 중!

 

그놈이 바로바로? format_suffix_patterns이 되시겠다.

format_suffix_patterns(urlpatterns, suffix_required=False, allowed=None) 형태가 기본이며,

제공된 각 URL 패턴에 추가된 형식 접미사 패턴을 포함하는 URL 패턴 list를 반환한다!

 

내부 요소로는

urlpatterns : 필수. URL 패턴 목록.

suffix_required : 선택사항. URL의 접미사를 옵션으로 하는지, 필수로 하는지를 나타내는 boolean. 디폴트는 False. 

allowed : 선택사항. 유효한 형식 접미사의 list 또는 tuple. 제공되지 않으면 와일드카드 형식 접미사 패턴이 사용된다.

 

ex) urlpatterns = format_suffix_patterns(urlpatterns, allowed=['json', 'html'])

 

또한 format_suffix_patterns를 사용하는 경우 'format'키워드 인수를 해당 뷰에 추가해야 한다.

그렇구먼! 즉 view에서 사용한 format=None과, urls의 format_suffix_patterns는 세트로 붙어 다니면서

파일 형식 접미사를 url에서 어떻게 할 것인가를 결정짓는다...고 생각하면 될 것 같다!

 

그럼 이전과 같이 모든 기능이 정상적으로 작동함을 볼 수 있다!

728x90
반응형