사용자 지정 DRF 응답 형식(JSONRenderer)

API 서버를 사용할 때 응답이 동일한 형식이 아닌 경우 프런트 엔드에서 처리하는 것이 귀찮을 수 있습니다.

따라서 응답 형식 설정은 필수입니다.

{
    "code": 200,
    "msg": "OK",
    "data": {
        "user": {
            "id": 2,
            "email": "[email protected]",
            "password": null,
            "name": "test",
            "created_at": "2023-02-21T12:35:30.745817+09:00"
        },
        "message": "login success",
        "token": {
            "access": "access token",
            "refresh": "refresh token"
        }
    }
}

이와 같이? ?

각 요청에 대해 개별적으로 응답 형식을 지정해야 한다면 지루할 것입니다.

그러나 Django를 개발한 개발자는 바보가 아니기 때문에 그들의 라이브러리를 사용하여 전체 응답을 형식화할 수 있습니다.

1. 라이브러리 설치

pip install djangorestframework-jsonp

2. 응답 형식 파일 만들기

프로젝트 폴더를 기반으로 파일을 생성하기만 하면 됩니다.

project/config/response_format.py
from rest_framework.renderers import JSONRenderer

class Default(JSONRenderer):
  def render(self, data, accepted_media_type=None, renderer_context=None):
    response_data = renderer_context.get('response')
    response = {
      'code': response_data.status_code,
      'msg': response_data.status_text,
      'data': data
    }

    return super(Default, self).render(response, accepted_media_type, renderer_context)

3. settings.py 수정

settings.py 파일의 프레임워크 재설정 섹션에 파일 경로를 추가합니다.

REST_FRAMEWORK = {
    .
    .
    .
    'DEFAULT_RENDERER_CLASSES': (
        'config.response_format.Default',
    ),
    .
    .
    .
}

좋아요