drf에 custom exception handler 적용하기
2023. 3. 18. 18:44
Django Exception Handling
Django에서는 exception을 어떻게 handling 하고 있을까?
공식 문서에서 살펴보면 detail에 에러 메시지를 return 하는 방식으로 error response를 주고 있다.
하지만 error response를 custom 하고 싶다면?
잘 알려진 jsend의 error response를 보자.
https://github.com/omniti-labs/jsend
이 방식으로 error response를 custom 하고 싶다면?
django 공식문서에서는 방법을 자세히 안내하고 있다.
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
REST_FRAMEWORK = {
'EXCEPTION_HANDLER': 'my_project.my_app.utils.custom_exception_handler'
}
custom exception handler를 작성하고, 이를 settings.py에 등록하면 끝!
출처:https://www.django-rest-framework.org/api-guide/exceptions/#custom-exception-handling
Custom Exception Handler 적용하기
def custom_exception_handler(exc,context):
response = exception_handler(exc,context)
if response is not None:
response.data['status'] = 'error'
try:
if (response.data['detail']) :
response.data['message'] = response.data['detail']
del response.data['detail']
return response
except:
return response
else:
STATUS_RSP_INTERNAL_ERROR['message'] = str(exc)
return Response(STATUS_RSP_INTERNAL_ERROR, status=200)
위의 예시를 변형하여 실제 프로젝트에 적용한 코드이다.
FE와 정의한 통신 규칙에 따라 에러를 return 하고 있다.
손 쉽게 custom excpetion 적용 완료!
'Django > Django Rest FrameWork' 카테고리의 다른 글
[DRF] DRF Django로 아이디/비밀번호 찾기 구현하기 - 5편 (0) | 2022.06.04 |
---|---|
[DRF] DRF Django로 이메일 인증(SMTP) 구현하기 - 4편 (0) | 2022.05.19 |
[DRF] DRF Django로 user detail , 내 프로필 정보 확인&수정 구현하기 - 3편 (0) | 2022.05.19 |
[DRF] DRF Django로 회원가입&로그인 구현하기(Username을 Email로!) - 2편(view & url & serializer) (0) | 2022.05.19 |
[DRF] DRF Django로 회원가입&로그인 구현하기(Username을 Email로!) - 1편(model & admin) (0) | 2022.05.17 |