2013-08-15 14 views
7

Utworzono niestandardowy wyjątek odnoszący się do http://django-rest-framework.org/api-guide/exceptions.html.Dodawanie niestandardowej odpowiedzi Nagłówki do APIException

Proszę wiedzieć, że mam swój własny serwer uwierzytelniający. Dlatego nie używam modułu uwierzytelniania rest_framework.

Dla błędów uwierzytelniania, chcę dodać nagłówek "WWW-Authenticate: Token" do odpowiedzi wysyłanej z wyjątku.

Wszelkie pomysły będą bardzo pomocne.

Aktualizacja:

Dzięki @ Pathetique, To, co skończyło się robi.

-Postępować klasę widoku podstawowego o nazwie BaseView.

- Przejmij metodę handle_exception, aby ustawić odpowiednie nagłówki, w moim przypadku "Uwierzytelnianie przez WWW".

Oto kod:

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) 

Twoje myśli?

+0

napotkał ten sam problem i Twoja sugestia działało jak powinno;) – Neara

Odpowiedz

4

Spróbuj nadrzędnymi finalize_response w spoczynku widzenia ramowej:

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

Edit:

Po obejrzeniu aktualizację, myślę, że ominięcie handle_exception powinno działać, chciałbym tylko dodać oświadczenie innego, aby wywołać metoda macierzysta w celu uwzględnienia innych wyjątków. Jedną z rzeczy, którą zauważyłem w nadpisywaniu wysyłki, co może nie być tutaj problemem, jest to, że ustawienie nowego klucza/wartości dla self.headers spowodowało błąd serwera, którego nie potrzebowałem do wytropienia. W każdym razie wydaje się, że jesteś na dobrej drodze.

+0

Dzięki Patetyczna, proszę spojrzeć na zaktualizowanej pytanie. Co myślisz? – ubhisat

+0

Ahh, przepraszam, że przegapiłem znaczenie Twojego wyjątkowego wyjątku ... zaktualizuję moją odpowiedź. – Fiver

Powiązane problemy