티스토리 뷰
[1] Custom Exception Handling 이란
API의 에러 응답(error response) 스타일을 내맘대로 핸들링할 수 있는 것을 말합니다.
현재 장고는 아래와 같은 스타일의 에러응답을 내려주도록 되어있는데요
{
"detail": 장고의 에러메세지
}
에러 응답에 status_code 필드를 추가하는 등
에러 응답 스타일을 커스터마이징하고 싶은 니즈가 있을 수 있습니다-!!
이럴때 취할 수 있는 방법이 custom exception handler 만들기 입니다-!!
[2] Custom Exception Handler 만들기
우선 저는 플젝에 utils라는 파일을 하나 만들었구요
문서에 있는 코드를 복붙해서 넣었습니다.
from rest_framework.views import exception_handler
def custom_exception_handler(exc, context):
# Call REST framework's default exception handler first,
# to get the standard error response.
response = exception_handler(exc, context)
# Now add the HTTP status code to the response.
if response is not None:
response.data['status_code'] = response.status_code
return response
[3] Custom Exception Handler 쓰도록 프로젝트 설정
그 다음은 저의 프로젝트가 default exception handler가 아니라
방금만든 custom exception handler를 쓰도록 설정을 해줘야합니다.
문서에 보면 settings.py에 아래와 같은 설정을 안해주면
Rest framework에서 기본적으로 제공하는 exception handler (rest_framework.views.exception_handler) 를 쓰게 될 것이라고
합니다..!
설정에 가서 추가해줬습니다!!
그리고 다시 올바르지 않은 요청을 해서 에러를 일으켜볼게요-!!
status_code 필드가 추가 된 에러응답 스타일로 잘 나옵니다..!
[궁금 1] detail도 바꿀 수 있을까...?!?
이렇게 바꿔보면..!
바뀝니다.
[궁금 2] exception으로 에러메세지 지정해준 것도 바뀔까?!
장고에서 알아서 exception 해주는 것 말고
이렇게 제가 발생시킨 예외인데..!! (에러메세지도 명시적으로 지정해줌)
이렇게 된 상태이면
custom_exception_handler 에서 지정해준 값으로 나오게 됩니다.
그래서 "헤더값이 올바르지 않습니다" 가 아니라 "테스트입니다" 로 나왔어요.
Reference
www.django-rest-framework.org/api-guide/exceptions/#custom-exception-handling
'🐍 > DRF' 카테고리의 다른 글
[DRF] 쿼리스트링을 받을 수 있는 URL 만들기 (2) | 2020.10.06 |
---|---|
[DRF] 장고 API 만들때, 에러 메세지 정책을 어떻게 하는 게 좋을까? (0) | 2020.10.01 |
[DRF] SerializerMethodField로 모델에서 변형된 JSON을 내려주기 (0) | 2020.09.26 |
[DRF] 기본 Exception과 APIExecption (0) | 2020.09.24 |
[DRF] TokenAuthentication (유저마다 토큰을 발급해서 유저를 식별해보자) (10) | 2020.09.21 |
- Total
- Today
- Yesterday
- flutter 앱 출시
- ribs
- ipad multitasking
- METAL
- Sketch 누끼
- PencilKit
- flutter build mode
- cocoapod
- 플러터 싱글톤
- Dart Factory
- drf custom error
- Django FCM
- Watch App for iOS App vs Watch App
- Python Type Hint
- flutter dynamic link
- Django Heroku Scheduler
- SerializerMethodField
- Flutter 로딩
- DRF APIException
- flutter deep link
- 플러터 얼럿
- Django Firebase Cloud Messaging
- Flutter getter setter
- 장고 URL querystring
- 구글 Geocoding API
- Flutter Text Gradient
- Flutter Spacer
- 장고 Custom Management Command
- github actions
- Flutter Clipboard
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |