当然可以,但是您需要对注册进行参数化。
不要使用装饰器,而是将注册移动到一个函数中:
def page_not_found(e):
return jsonify({'status': 'error',
'reason': '''There's no API call for %s''' % request.base_url,
'code': 404}), 404
def register_all(app):
app.register_error_handler(404, page_not_found)
然后导入
register_all
并将其与您的
Flask()
对象一起调用。
这使用
Flask.register_error_handler()
函数而不是装饰器。
为了支持蓝图,您需要等待Flask的下一个版本(其中包括
此提交),或直接使用装饰器函数:
app_or_blueprint.errorhandler(404)(page_not_found)
对于很多这样的任务,您也可以使用蓝图(Blueprint)来完成,只要使用Blueprint.app_errorhandler()
:
common_errors = Blueprint('common_errors')
@common_errors.errorhandler(404)
def page_not_found(e):
return jsonify({'status': 'error',
'reason': '''There's no API call for %s''' % request.base_url,
'code': 404}), 404
并不是所有的功能都可以使用蓝图来处理,但是如果你要注册的只是错误处理程序,那么使用蓝图是一个很好的方法。
像往常一样导入蓝图并将其注册到您的应用程序中:
from yourmodule import common_errors
app.register_blueprint(common_errors)
Blueprint.app_errorhandler
:https://dev59.com/jWcs5IYBdhLWcg3wiEiK - Jinsong Li