[Custom] DRF Custom Render fomat (JSONRenderer)

2024. 4. 29. 23:37· Django/DRF
반응형

DRF는 Django를 이용하여 API를 쉽게 만들 수 있도록 도와주는 프레임워크이다. 다른 프레임워크나 언어에 비해 배우기 쉽다는 장점이 있어 많은 사람들이 처음 시작하는데 자주 사용하는데 조금만 깊게 공부를 하면 할수록 커스텀이 필요하다는 말을 들었다. 

 

특정 프로젝트에서는 요구사항에 맞게 JSONRenderer를 커스터마이징해서 사용해야 할 경우도 생긴다고 한다. 이번 포스트에서는 DRF에서의 JSONRenderer를 커스터마이징 하는 방법에 대해서 작성해 보려고 한다.

DRF의 기본적인 Response의 경우에는 왼쪽 사진처럼, 커스터마이징한 결과는 오른쪽처럼 표시가 되도록 하려고 한다.

우선 rest_framework.renderers에서 JSONRenderer를 상속받아 오버라이딩해 주었다.

# core/renderers.py

from rest_framework.renderers import JSONRenderer


class CustomRenderer(JSONRenderer):

    def render(self, data, accepted_media_type=None, renderer_context=None):
        response_data=renderer_context.get('response')

        try:
            status_code = response_data.status_code
            status_text = response_data.status_text
        except AttributeError:
            status_code = 200
            status_text = "OK"

        response = {
            'status_code': status_code,
            'status_text': status_text,
            'data':data
        }
        return super(CustomRenderer, self).render(response, accepted_media_type, renderer_context)

위의 코드를 보면 JSONRenderer을 상속받아서 render를 오버라이딩해서 구현하였다. renderer_context.get('response')를 통해서 status_code와 status_text를 추출해 내는 방식이다. 

 

try execpt문에서 예외처리로 상태코드 200과 OK를 지정해 준 이유는 예외가 발생했지만 클라이언트 요청 자체는 성공적으로 처리되었다면, 상태 코드는 200으로 설정하는 것이 적절하다고 해서 그렇게 진행하였다.

 

물론 API의 설계에 따라 다르다는 걸 인지하고 있어야 한다.

 

마지막으로 settings.py의 REST_FRAMEWORK에 기본 랜더러 클래스를 적용시켜줘야 한다.

REST_FRAMEWORK = {
    "DEFAULT_RENDERER_CLASSES": [
        'core.renderers.CustomRenderer',
    ]
}

 

 

반응형
저작자표시 (새창열림)

'Django > DRF' 카테고리의 다른 글

[Custom] DRF Custom exception fomat (exception_handler)  (0) 2024.05.02
[Custom] DRF Custom Response fomat (Response)  (1) 2024.05.01
[ORM] Django의 ORM이란 무엇인가?  (0) 2024.04.21
[Convention] Django Import 순서에 대해서  (0) 2024.04.11
venv 가상환경 명령어  (0) 2024.04.09
'Django/DRF' 카테고리의 다른 글
  • [Custom] DRF Custom exception fomat (exception_handler)
  • [Custom] DRF Custom Response fomat (Response)
  • [ORM] Django의 ORM이란 무엇인가?
  • [Convention] Django Import 순서에 대해서
Jong_seoung
Jong_seoung
기록하자, 머리는 생각하는 곳이지 저장장치가 아니다.
반응형
Jong_seoung
Today_developStory
Jong_seoung
전체
오늘
어제

블로그 메뉴

  • Home
  • Git Hub
  • 분류 전체보기 (351)
    • Theory (16)
    • Java (3)
      • 알고리즘 (2)
      • 문법 (0)
    • Spring (7)
      • 스프링 입문 (6)
      • PickTalk (0)
      • 에러처리 (1)
    • Python (80)
      • 알고리즘 - 이론 (17)
      • 알고리즘 - 내장함수, 라이브러리 등등 (3)
      • 알고리즘 - 백준 (53)
      • 나도코딩 정리 (2)
      • 기타 (5)
    • Django (159)
      • DRF (105)
      • 인프라 (46)
      • DataBases (2)
      • API Docs (6)
    • FrontEnd (22)
      • htmx (2)
      • React (8)
      • 자바스크립트 (12)
    • GIT (16)
    • 기타 (8)
      • 정리 (2)
      • Flutter (1)
      • 마이크로프로세서 - ATmega128 (2)
      • 개발환경 세팅 (3)
    • 자격증 (37)
      • 정보처리기사 (19)
      • SQLD자격증 (18)

인기 글

최근 글

태그

  • alarm
  • BFS
  • CSRF
  • Django
  • django channels
  • django sse
  • django tutorial
  • django 배포
  • django 스웨거 적용
  • Django 이미지 저장

최근 댓글

hELLO · Designed By 정상우.v4.3.0
Jong_seoung
[Custom] DRF Custom Render fomat (JSONRenderer)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.