수학과의 좌충우돌 프로그래밍

[Django] rest_framework default 설정 본문

웹프로그래밍/DRF

[Django] rest_framework default 설정

ssung.k 2020. 1. 8. 22:41

rest_framework 의 각종 default 설정에 대해서 알아보겠습니다.

https://github.com/encode/django-rest-framework/blob/master/rest_framework/settings.py

 

encode/django-rest-framework

Web APIs for Django. 🎸. Contribute to encode/django-rest-framework development by creating an account on GitHub.

github.com

장고 공식문서 rest_framework/settings.pyDEFAULTS dict 를 통해 확인할 수 있습니다.

현재 블로그는 2020년 1월 8일 3.9 버전에 대한 내용입니다.

 

HTTP 최종 응답 생성

'DEFAULT_RENDERER_CLASSES': [
  'rest_framework.renderers.JSONRenderer',
  'rest_framework.renderers.BrowsableAPIRenderer',
],
  • JSONRenderer

    • API 호출에 대한 응답
  • BrowsableAPIRenderer

    • 웹 브라우저에서 보여지는 화면

 

HTTP 요청 내역 처리

'DEFAULT_PARSER_CLASSES': [
        'rest_framework.parsers.JSONParser',
        'rest_framework.parsers.FormParser',
        'rest_framework.parsers.MultiPartParser'
    ],
  • JsonParser

    • JSON 포맷 요청 처리
  • FormParser

    • enctype application/x-www-form-urlencoded 요청 처리
  • MultiPartParser

    • enctype multipart/form-data 요청 처리 (파일 업로드 지원)

 

HTTP 요청의 인증

'DEFAULT_AUTHENTICATION_CLASSES': [
  'rest_framework.authentication.SessionAuthentication',
  'rest_framework.authentication.BasicAuthentication'
],
  • SessionAuthentication

    • 세션을 통해 인증 유저 확인
  • BasicAuthentication

    • Basic Authentication 을 수행

 

API 호출 권한 체크

'DEFAULT_PERMISSION_CLASSES': [
  'rest_framework.permissions.AllowAny',
],
  • AllowAny

    • 모든 접근을 허용

     

특정 시간 내, 최대 요청 수 제한 - throttling

'DEFAULT_THROTTLE_CLASSES': [],
'DEFAULT_THROTTLE_RATES': {
    'user': None,
    'anon': None,
 },

기본적으로 throttling 아무 것도 설정되어 있지 않습니다.

  • DEFAULT_THROTTLE_CLASSES

    • 최대 호출을 제한할 클래스
  • DEFAULT_THROTTLE_RATES

    • rate 값, 지정 기간 내의 최대 호출 횟수 지정

 

페이징 처리

'DEFAULT_PAGINATION_CLASS': None,
'PAGE_SIZE': None,
  • DEFAULT_PAGINATION_CLASS

    • 페이징을 처리할 클래스
  • PAGE_SIZE

    • 한 페이지의 최대 갯수

 

 

문자열 매칭 검색 기능 - filter

'DEFAULT_FILTER_BACKENDS': [],
'SEARCH_PARAM': 'search',
'ORDERING_PARAM': 'ordering',

기본적으로 filter 기능은 꺼져 있습니다.

이는 DB 에서 where query 에 해당합니다.

 

날짜/시간 포맷

from rest_framework import ISO_8601

'DATE_FORMAT': ISO_8601,
'DATE_INPUT_FORMATS': [ISO_8601],
'DATETIME_FORMAT': ISO_8601,
'DATETIME_INPUT_FORMATS': [ISO_8601],
'TIME_FORMAT': ISO_8601,
'TIME_INPUT_FORMATS': [ISO_8601],

ISO_8601값은 문자열 "iso-8601" 입니다.

ISO_8601 이란?

날짜와 시간과 관련된 데이터 교환을 다루는 국제 표준입니다.

국제표준화기구 ISO 에서 공포되었으며 1988년에 처음 공개되었습니다.

https://ko.wikipedia.org/wiki/ISO_8601

자세한 사항은 위키피디아를 참고하세요.

 

인코딩

'UNICODE_JSON': True,
'COMPACT_JSON': True,
'STRICT_JSON': True,
'COERCE_DECIMAL_TO_STRING': True,
'UPLOADED_FILES_USE_URL': True,
  • UNICODE_JSON

    • json.dumps 할 경우 ensure_ascii=False 로 적용하게 되고 이는 UTF8 인코딩을 의미한다.
  • COMPACT_JSON

    • json.dumps할 경우 separators 옵션을 적용

      • True 일 경우

        • 띄어쓰기 없음
        • ex) ',' ':'
      • False 일 경우

        • 띄어쓰기 있음
        • ex) ', ' ': '
  • STRICT_JSON

    • json.dumps 할 경우 allow_nan=False 를 적용

      • NaN, inf, -inf 등의 값에 대해서 ValueError 발생
  • COERCE_DECIMAL_TO_STRING

    • Decimal 을 문자열로 강제 변환할지에 대한 여부

    python 은 float 형과 decimal 형이 있는데 반해 javascript 는 float 형 밖에 없습니다. 따라서 변환 도중의 오류를 방지하기 위해서 decimal 은 str 으로 변환해줍니다.

  • UPLOADED_FILES_USE_URL

    • 파일명 대신 URL을 제공할지에 대한 여부

 

Browseable API

# Browseable API
'HTML_SELECT_CUTOFF': 1000,
'HTML_SELECT_CUTOFF_TEXT': "More than {count} items...",
  • HTML_SELECT_CUTOFF

    • Choice 옵션에서 Option 최대 허용 수
  • HTML_SELECT_CUTOFF_TEXT

    • 개수 초과 시의 안내 메세지
Comments