2013-08-15 13 views
7

Ho creato un'eccezione personalizzata riferita a http://django-rest-framework.org/api-guide/exceptions.html.Aggiunta di intestazioni di risposta personalizzate a APIException

Si prega di sapere che ho il mio backend di autenticazione. Quindi non sto usando il modulo di autenticazione di rest_framework.

Per gli errori di autenticazione, desidero aggiungere l'intestazione 'WWW-Authenticate: Token' alla risposta inviata dall'eccezione.

Qualsiasi idea sarà molto utile.

Aggiornamento:

Grazie @ Patetica, Questo è quello che ho finito per fare.

-Dispone di una classe di visualizzazione di base denominata BaseView.

-overover il metodo handle_exception per impostare intestazioni appropriate, nel mio caso 'Autenticazione WWW'.

Ecco il codice:

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) 

I vostri pensieri?

+0

Incontrato stesso problema e il suo suggerimento ha funzionato come dovrebbe;) – Neara

risposta

4

Prova sovrascrivendo finalize_response nel tuo riposo vista quadro:

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

Edit:

Dopo aver visto l'aggiornamento, penso che la tua forzatura dei handle_exception dovrebbe funzionare, vorrei solo aggiungere un else di chiamare il metodo genitore per coprire altre eccezioni. Una cosa che ho notato nella sovrascrittura dell'invio, che potrebbe non essere un problema qui, è che l'impostazione di una nuova chiave/valore per self.headers ha provocato un errore del server che non ho avuto il tempo di rintracciare. Ad ogni modo, sembra che tu sia sulla strada giusta.

+0

Grazie Patetica, Si prega di dare un'occhiata alla domanda aggiornato. Cosa ne pensi? – ubhisat

+0

Ahh, mi dispiace, ho perso l'importanza della tua eccezione personalizzata ... aggiornerò la mia risposta. – Fiver

Problemi correlati