Flask hat einen guten Fehlerhandler, wenn abort()
verwendet wird oder wenn der Fehler tatsächlich aufgetreten ist.
In der Flask-Dokumentation finden Sie ein Beispiel für den Fehler 404-Handler:
@app.errorhandler(404)
def not_found(error):
return render_template('404.html'), 404
Also habe ich versucht, einen benutzerdefinierten Fehlercode zu erstellen
if False:
abort(777)
@app.errorhandler(777)
def something_is_wrong(error):
return render_template('777.html'), 777
Aber es funktioniert nicht und der Werkzeug-Debugger sagt: LookupError: keine Ausnahme für 777
Ich fand diese Frage die besagt, dass ich es so machen soll:
if False:
return '777 error', 777
Leider erzeugt der obige Code einen weißen Bildschirm, selbst der Werkzeug-Debugger erscheint nicht
Ich weiß ich kann einfach:
if False:
return render_template('777.html')
Der Code wird jedoch sauberer, wenn ich abort()
verwende. Gibt es eine Möglichkeit, einen benutzerdefinierten Fehlercode zu erstellen?
Die Liste der möglichen HTTP-Statuscodes wird von der Internet Assigned Numbers Authority festgelegt, sodass Sie keine benutzerdefinierte hinzufügen können. Werkzeug erkennt dies und versucht zu verhindern, dass Sie einen sinnlosen Code an den Browser senden. Durchsuchen Sie die Liste der Statuscodes , um einen zu Ihrem Fehler passenden zu finden und verwenden Sie diesen.
Bearbeiten: Hinzufügen von Statuscodes zu Werkzeug/Flask
import werkzeug.exceptions as ex
from flask import Flask, abort
class PaymentRequired(ex.HTTPException):
code = 402
description = '<p>You will pay for this!</p>'
abort.mappings[402] = PaymentRequired
app = Flask(__name__)
@app.route('/')
def mainpage():
abort(402)
@app.errorhandler(402)
def payme(e):
return 'Pay me!'
app.run()
Abhängig von der Lektüre der Frage kann dies hilfreich sein.
Es gibt eine einfachere Möglichkeit, die Behandlung von Fehlerseiten für Kunden für eine bestimmte Ausnahme hinzuzufügen.
class MyCustom404(Exception):
pass
@app.errorhandler(404)
def page_not_found(error):
return render_template("errors/404.html"), 404
@app.errorhandler(MyCustom404)
def special_page_not_found(error):
return render_template("errors/custom_404.html"), 404
... dann lösen Sie Ihren neuen Handler aus, wenn Sie ihn benötigen
raise MyCustom404
Siehe die Dokumente hier .
In meinem Fall ist Kolben = 0,11,1 Werkzeug = 0,11,10
Ich verwende beispielsweise den http-Statuscode 451.
wenn Sie abort () mit einem Code oder einer int-Nummer verwenden möchten, z. B. abort (451), erstellen Sie zunächst eine benutzerdefinierte HTTPException, eine Unterklasse von HTTPException.anhängen Sie Ihre HTTPException an default_exceptions
.
from werkzeug.exceptions import HTTPException, default_exceptions, Aborter
class UnavailableForLegalReasons(HTTPException):
code = 451
description = 'BIG BROTHER IS WATCHING YOU'
default_exceptions[451] = UnavailableForLegalReasons
abort = Aborter() # don't from flask import abort
@app.errorhandler(451)
def uflr(e):
return e, 451
@app.route('/debug')
def debug():
abort(451)
wenn Sie dann auf den Pfad im Browser zugreifen, können Sie Folgendes anzeigen: __.
aber der http-Grundsatz ist UNBEKANNT,
du kannst es ändern
from werkzeug.http import HTTP_STATUS_CODES
HTTP_STATUS_CODES[451] = 'Unavailable For Legal Reasons' # or even empty
Sie können auch Flask API und das Fehlerbehandlungssystem verwenden: