API-Kolben--liefert JSON-aber HTML Ausnahmen break my JSON client
Ausnahmen kehrten in den HTML-break my JSON client. Ich möchte jsonify dieser Ausgabe.
Genauer: ich habe eine view-Funktion, die einen Endpunkt dieser api app.
Wie Sie sehen können, diese Funktion gibt das Ergebnis im json-Format.
@app.route('/route1')
def api_route1():
if user_id in request.args:
k1 = request.args['user_id']
return flask.jsonify(recs=some_function(k1))
else:
return "no valid user_id supplied"
Das problem, unbehandelte Ausnahme in HTML, z.B.,
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>TypeError: 'NoneType' object is not iterable // Werkzeug Debugger</title>
<link rel="stylesheet"
href="?__debugger__=yes&cmd=resource&f=style.css"
type="text/css">
Diese bricht mir das json-client. Das HTML-format ist eindeutig ein Standard, aber ich weiß nicht, wie zu deaktivieren Sie es und geben Sie jsonified Ausnahmen (und idealerweise jsonify nichts zurückgegeben, auch Header).
Ich vermute, was ich brauche, ist irgendwo in der ausgezeichneten Flasche Dokumentation, aber ich kann es nicht finden.
- So dass Sie versuchen, zu bewahren, die Fehlermeldungen und senden Sie diese als JSON in dem Fall, dass etwas schief geht?
- yep, das ist es, was ich will.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie definieren, HTTP Fehler-Handler in der Flasche.
Einem einfachen JSON-returing 404-Prozedur könnte wie folgt Aussehen:
Mit dieser werden Sie in der Lage sein zu prüfen, für
data.error
auf dem client, und wenn es vorhanden ist, Sie können den Fehler-text mit Daten.text (der Fehler verging wiee
istwerkzeug.exceptions.NotFound
deren string-Darstellung ist "404: Nicht Gefunden").Machen die traceback zur Verfügung, um die JSON-client hat das Potenzial, vertrauliche Informationen offenzulegen.
Mein Rat ist:
500 Seite Aussehen könnte:
Den code unten sollte den trick tun. So ist die Idee, fängt jede Ausnahme, die möglicherweise aufgeworfen worden sind, erhalten Sie die Ausnahmedetails formatiert als Zeichenfolge mit dem traceback-Modul und dann zurück, das als gültiges json. Ich würde empfehlen, indem ein Bündel von except-Anweisungen mit den wichtigsten Arten von Fehler, die Sie erwarten zu geschehen, und eine besser lesbare Fehlermeldung. Dann können Sie noch eine Letzte Ausnahme als catch-all für den Fall dass etwas seltsames und unerwartetes passiert.