python flask abort

python - Frasco: ¿Cómo crear un código abort() personalizado?



flask (4)

Flask tiene un buen manejador de errores usando abort() o cuando el error realmente ocurrió.

De la documentación de Flask hay un ejemplo para el controlador de error 404:

@app.errorhandler(404) def not_found(error): return render_template(''404.html''), 404

Entonces, traté de crear un código de error personalizado como

if False: abort(777) @app.errorhandler(777) def something_is_wrong(error): return render_template(''777.html''), 777

Pero no funciona y el depurador de Werkzeug dice: LookupError: no hay excepción para 777

Encontré esta pregunta que dice que debo hacerlo así:

if False: return ''777 error'', 777

Desafortunadamente, el código de arriba produce pantalla blanca, incluso el depurador Werkzeug no sale

Sé que puedo simplemente hacer:

if False: return render_template(''777.html'')

Pero hará que el código sea más limpio si utilizo el abort() . ¿Hay alguna forma de crear código de error personalizado?


Dependiendo de la lectura de la pregunta, esto podría ser útil.

Hay una forma más fácil de agregar el manejo de la página de error del cliente para una excepción específica, puede hacer esto:

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

... luego active su nuevo controlador cuando lo necesite con

raise MyCustom404

Vea los documentos aquí .


En mi caso, Flask == 0.11.1 Werkzeug == 0.11.10

Yo uso abortar el código de estado http 451 por ejemplo.

Si desea usar abort () con un código, un número int, como abort (451), primero debe crear una excepción HTTP personalizada, una subclase de excepción HTTP y agregar su excepción HTTP a la excepción predeterminada.

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)

Luego, cuando accede a la ruta en el navegador, puede mirar esto

pero la frase de razón http es DESCONOCIDA,

Tú puedes cambiarlo

from werkzeug.http import HTTP_STATUS_CODES HTTP_STATUS_CODES[451] = ''Unavailable For Legal Reasons'' # or even empty


La lista de posibles códigos de estado HTTP está determinada por la Autoridad de Números Asignados de Internet, por lo que no puede agregar uno personalizado. Werkzeug lo reconoce y trata de evitar que envíes un código sin sentido al navegador. Mire la lista de códigos de estado para encontrar uno que coincida con su error y utilícelo.

Edición: Agregar códigos de estado a 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()