2013-08-15 3 views
7

http://django-rest-framework.org/api-guide/exceptions.html을 참조하는 사용자 지정 예외가 생성되었습니다.사용자 응답 헤더를 APIException에 추가

제 개인 인증 백엔드를 보유하고 있습니다. 따라서 rest_framework의 인증 모듈을 사용하지 않습니다.

인증 오류의 경우 'WWW-Authenticate : Token'헤더를 예외에서 전송 된 응답에 추가하려고합니다.

어떤 아이디어라도 도움이 될 것입니다.

업데이트 : 비창, @

덕분에이 내가하고 결국 것입니다.

-Baseview라는 기본보기 클래스가 있습니다.

- 내 머리 글자 'WWW-Authenticate'에서 적절한 헤더를 설정하는 handle_exception 메소드를 오버라이드합니다.

class BaseView(APIView): 
    def handle_exception(self, exc): 
    if isinstance(exc, MYEXCEPTION): 
     self.headers['WWW-Authenticate'] = "Token" 
     return Response({'detail': exc.detail, 
         status=exc.status_code, exception=True) 

의견 : 여기

코드인가?

+0

가 발생 동일한 문제와 제안 일) – Neara

답변

4

하면 나머지 프레임 워크 뷰에서 finalize_response를 오버라이드 (override) 해보십시오 :

def finalize_response(self, request, *args, **kwargs): 
    response = super(SomeAPIView, self).finalize_response(request, *args, **kwargs) 
    response['WWW-Authenticate'] = 'Token' 
    return response 

편집 :

이 업데이 트를 본 후, 나는 handle_exception의 재정의 (override)가 작동해야한다고 생각, 내가 단지를 호출하는 다른 문을 추가합니다 다른 예외를 처리하기위한 부모 메서드 여기에 문제가되지 않을 수도있는 디스패치 재정의 문제 중 하나는 self.headers에 새로운 키/값을 설정하면 서버 오류가 발생하여 추적하는 데 시간이 걸리지 않는다는 것입니다. 어쨌든, 옳은 길을 가고있는 것 같습니다.

+0

감사 비창은 업데이트 된 질문에서 참조하시기 바랍니다. 당신은 어떻게 생각하십니까? – ubhisat

+0

아, 죄송합니다. 사용자 정의 예외의 중요성을 놓친 것은 ... 내 대답을 업데이트 할 것입니다. – Fiver

관련 문제