본문 바로가기

web/Django_rest_framework

django rest_freamework에서 리턴값을 json으로 보내자.

 

 

1. 모든 API를 json으로 리턴한다

가장 쉽고 빠른 방법.

Settings.py 에 세팅하면 자동으로 json으로 리턴합니다.

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': (
        'rest_framework.renderers.JSONRenderer',
        'rest_framework.renderers.BrowsableAPIRenderer',
    )
}

단 위의 방법은 모든 API에 대하여 json 형식으로 대응됩니다. 즉 rest_freamework에서 지원하는 템플릿을 사용할 수 없습니다.

 

2.  depoly 따라 설정하고 한다.

예를 들어 개발 및 test 일 경우엔 setting_develop.py로 만들어서 REST_FRAMEWORK의 옵션을 설정하지 않는 방식입니다.

이렇게 되면 depoly에 따라 구분되지만, API 별로 구분할수 없습니다.

 

 

3. 각 API별로 설정하고 싶다

view에서 해당 CBV에 설정하고 싶다면 view에 renderer_classes로 설정하면 해당 API는 JSON형식으로 리턴됩니다.

from rest_framework.renderers import JSONRenderer

class MoreUsersView(viewsets.ViewSet):
    renderer_classes = (JSONRenderer,)

 

 

위의 셋팅을 하지 않으면 resfremework 템플릿으로 반환 값을 변경되어 템플릿으로 옵니다.

 

아래는 일반 Get요청 했을시의 swagger 템플릿으로 오는 화면입니다. content-type도 text/html로 반환됩니다.

 

view에서의 RETURN을 Response() -> JsonResponse()로 변경하면 가능하지만, resfremework 템플릿을 사용할 수 없습니다.

무조건 Json으로 반환되기 때문입니다. 리턴 함수를 Response()로 한 다음 API와 depoly에 맞게 조정하는 것을 추천합니다.

 

 

 

 

- 혹시 swagger에서 특정 url을 숨기고 싶다면 아래 키워드를 추가 해보자. (django버전에 따라서 동작 안할수 있습니다. )

exclude_from_schema = True