2014-03-31 2 views
6

REST 장고 프레임 워크에서 사용자 지정 오류 응답을 만들려고합니다.Django REST 사용자 지정 오류

나는

from rest_framework.views import exception_handler 

def custom_exception_handler(exc): 
    """ 
    Custom exception handler for Django Rest Framework that adds 
    the `status_code` to the response and renames the `detail` key to `error`. 
    """ 
    response = exception_handler(exc) 

    if response is not None: 
     response.data['status_code'] = response.status_code 
     response.data['error'] = response.data['detail'] 
     response.data['detail'] = "CUSTOM ERROR" 

    return response 

, 내 views.py에 다음과 또한 settings.py에 다음과 같은 추가 포함 시켰습니다.

REST_FRAMEWORK = { 
       'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.AllowAny', 
      ), 
       'EXCEPTION_HANDLER': 'project.input.utils.custom_exception_handler' 
     } 

예상되는 응답이 없기 때문에 뭔가 빠졌습니다. 400 API 응답의 맞춤 오류 메시지

감사합니다, the documentation에서

답변

11

Bibhas가 말한 것처럼 사용자 지정 예외 처리기를 사용하면 예외가 호출 될 때만 자신이 정의한 오류를 반환 할 수 있습니다. 예외가 트리거되지 않은 채 사용자 정의 응답 오류를 반환하려면 뷰 자체에서 반환해야합니다. 예 :

return Response({'detail' : "Invalid arguments", 'args' : ['arg1', 'arg2']}, 
        status = status.HTTP_400_BAD_REQUEST) 
+0

확실하지만 JSON 응답을 통해 사용자 정의 오류가 표시됩니다. 필자가 이것을 시도했지만 "글로벌 이름"응답을 얻는 Im은 정의되지 않았습니다. – felix001

+3

rest_framework 응답을 가져와야합니다 : 'from rest_framework.response import Response'. 그리고이 코드는 지정한 구조 (** { 'detail': "잘못된 인수", 'args': [ 'arg1', 'arg2']} **)와 JSON 응답을 반환합니다. 필요한 오류 코드 (** 400 **, 자세한 내용은 [restframework 상태 코드] (http://www.django-rest-framework.org/api-guide/status-codes)를 확인하십시오) – argaen

0

- 예외 처리기 만 발행되는 예외에 의해 생성 된 응답을 호출됩니다

하는 것으로. serializer 유효성 검사가 실패 할 때 일반 뷰에서 반환하는 HTTP_400_BAD_REQUEST 응답과 같이보기에서 직접 반환 된 응답에는이 값이 사용되지 않습니다.

관련 문제