webentwicklung-frage-antwort-db.com.de

Flask - Wie erstellt man einen eigenen abort () Code?

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?

26
hrsetyono

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()
30
Abe Karplus

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 .

11
Andrew Barrett

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: __.  enter image description here

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

 enter image description here

6
xavierskip

Sie können auch Flask API und das Fehlerbehandlungssystem verwenden:

http://www.flaskapi.org/api-guide/exceptions/

0
Mathieu Rodic