본문 바로가기

Django

DRF 응답 포멧 커스텀 하기(JSONRenderer)

API 서버를 사용할때 응답의 포멧이 다르다면 프론트에서 처리하기가 매우 화가 날것이다.

그렇기 때문에 응답(response) 포멧 설정이 필수적이다.

 

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

이런 식으로??

 

 

만일 모든 요청에 대해서 응답 포멧을 일일이 설정해 줘야 한다면 매우 번거로운 일이 될 것이다.

하지만 장고를 개발한 개발자들이 그렇게 멍청하지 않으니 우리는 그들이 만든 라이브러리를 사용해서 전체 응답 형식을 설정해 줄 수 있다.

 

 

1. 라이브러리 설치

pip install djangorestframework-jsonp

 

2. response 포멧 파일 생성

본인의 프로젝트 폴더에 맞게 파일을 생성해 주면 된다.

 

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 파일의 reset framework 부분에 해당 파일을 경로를 추가해 준다.

REST_FRAMEWORK = {
    .
    .
    .
    'DEFAULT_RENDERER_CLASSES': [
        'config.response_format.Default',
    ],
    .
    .
    .
}

 

 

 

끄읕