본문 바로가기
Python/REST Framework

[Django-REST] Exception Handler

by 혀나Lee 2016. 10. 19.

RestFramework에서 자동으로 API 함수에서 Exception이 발생하면 Exception Handler에서 처리할 수 있도록 settings에서 조건을 줄 수 있다.


보통 코드에서 exception을 처리하기 위해서 try ~ exception을 사용한다.


try:
	... code detail
except Exception as e:
	print(e) 

return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR)


하지만, 위와 같은 코드로 작성하면 코드의 복잡도가 높아지고 reading이 힘들어진다.

Custom exception handling

Django RestFramework에서는 Exception Handler를 settings에서 자동으로 잡아 응답시킬 수 있다.


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' 

}


REST_FRAMEWORK = {
    'EXCEPTION_HANDLER''rest_framework.views.exception_handler'

}

Example

BCB 프로젝트의 response 형식에 맞춰 Exception Handler를 적용시킨 예제이다.


bcb/library/common.py
def custom_exception_handler(exc, context):
    # Call REST framework's default exception handler first,
    # to get the standard error response.
    print(exc)
    return return_response(500)
bcb/base/settings/base.py
# REST-Framework
REST_FRAMEWORK = {
    ...
    'EXCEPTION_HANDLER''bcb.library.common.custom_exception_handler',
}
API 결과
{"status":500,"message":"Internal server error.","data":null}

 

Django RestFramework Exceptions: http://www.django-rest-framework.org/api-guide/exceptions/



'Python > REST Framework' 카테고리의 다른 글

[REST] Serializer fields  (0) 2016.10.11
[REST] Nested relationships  (0) 2016.10.11
[REST Framework] extra()를 사용한 AS serializer 필드 등록  (0) 2016.10.10

댓글