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를 적용시킨 예제이다.
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 |
댓글