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()
También puede usar Flask API y su sistema de manejo de errores: