Wie deaktivieren Sie die Rückkehr von HTML-Fehler-Seite mit django rest framework?
Wenn ich einen Fehler außerhalb der libs von DRF, django zurück senden den HTML-Code der Fehler statt des richtigen Fehler-Reaktion die Verwendung von DRF.
Beispiel:
@api_view(['POST'])
@permission_classes((IsAuthenticated,))
def downloadData(request):
print request.POST['tables']
Rückkehr Ausnahme MultiValueDictKeyError: "'tables'"
. Und wieder die volle HTML. Wie bekommen nur die Fehler einer JSON?
P. D:
Dies ist der Letzte code:
@api_view(['GET', 'POST'])
def process_exception(request, exception):
# response = json.dumps({'status': status.HTTP_500_INTERNAL_SERVER_ERROR,
# 'message': str(exception)})
# return HttpResponse(response,
# content_type='application/json; charset=utf-8')
return Response({
'error': True,
'content': unicode(exception)},
status=status.HTTP_500_INTERNAL_SERVER_ERROR
)
class ExceptionMiddleware(object):
def process_exception(self, request, exception):
# response = json.dumps({'status': status.HTTP_500_INTERNAL_SERVER_ERROR,
# 'message': str(exception)})
# return HttpResponse(response,
# content_type='application/json; charset=utf-8')
print exception
return process_exception(request, exception)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eine Möglichkeit der Rückgabe von json wäre, fangen die Ausnahmen und die Rückgabe richtige Antwort (vorausgesetzt, du bist mit
JSONParser
als default-parser):UPDATE
Für Globale wise use-case die richtige Idee wäre, um die json-Antwort in Ausnahme middleware.
Finden Sie beispielsweise in in diesem blog-post.
In Ihrem Fall müssen Sie zurück DRF Antwort, so dass, wenn eine Ausnahme ausgelöst wird, wird es am Ende in der
process_exception
:Können Sie ersetzen die Standard-Fehler-Handler, indem Sie einen benutzerdefinierten handler in Ihrer URLConf wie hier beschrieben
Etwas wie dieses:
und:
Ich hoffe, das hilft.
Wie Sie sehen können, in der Dokumentation.
Alles, was Sie tun müssen ist, konfigurieren Sie die Einstellungen.
Aufzuzeigen und eine Ansicht, die bekommst
(exception, context)
Wie diese:
Meine Implementierung ist so, weil, wenn eine erwartete rest-framework-Ausnahme ausgelöst wird, wie ein 'Ausnahmen.NotFound',
exception.message
leer. Thats, warum Im ersten Aufruf zuexception_handler
von rest-framework. Wenn eine erwartete Ausnahme, bekomme ich seine Nachricht.EXCEPTION_HANDLER
Schlüssel sollte verwendet werden, wie eine Globale, catch-all-error-handler, aber Sie könnte prüfen, Ausnahmen hier, um zu sehen, was für ein Typ Sie sind, um die gewünschte Reaktion