为 json 返回 api 自定义烧瓶错误处理程序
customizing flask error handlers for json returning api
我有一个 flask 应用程序,它有两种类型的路由:
(1)。网站路由,例如 /home、/user/、/news_feed
(2)。 json returning api 用于移动应用程序,例如 /api/user、/api/weather 等
我通过 flask 提供的@app.errorhandler 装饰器为常见错误(如 404 和 500)使用自定义错误页面 - 我的网站
@app_instance.errorhandler(404)
def page_note_found_error(err):
return render_template("err_404.html"), 404
@app_instance.errorhandler(500)
def internal_server_error(err):
db_instance.session.rollback()
return render_template("err_500.html"), 500
如果说我通过手机 api.
收到 500 错误,我不希望我的手机 api 进入这些错误页面
有没有办法绕过或自定义某些路由(api)的错误处理程序,以便returns json响应而不是我的自定义错误页面
您可以深入了解请求的详细信息以确定 URL 路径。如果路径以 /api/
为前缀,那么您可以将其视为 API 请求和 return 一个 JSON 响应。
from flask import request, jsonify
API_PATH_PREFIX = '/api/'
@app_instance.errorhandler(404)
def page_not_found_error(error):
if request.path.startswith(API_PATH_PREFIX):
return jsonify({'error': True, 'msg': 'API endpoint {!r} does not exist on this server'.format(request.path)}), error.code
return render_template('err_{}.html'.format(error.code)), error.code
这并不理想。我认为您可能已经能够使用 Flask 蓝图来处理这个问题,但是特定于蓝图的错误处理程序不适用于 404,而是调用应用程序级别的处理程序。
我有一个 flask 应用程序,它有两种类型的路由:
(1)。网站路由,例如 /home、/user/、/news_feed
(2)。 json returning api 用于移动应用程序,例如 /api/user、/api/weather 等
我通过 flask 提供的@app.errorhandler 装饰器为常见错误(如 404 和 500)使用自定义错误页面 - 我的网站
@app_instance.errorhandler(404)
def page_note_found_error(err):
return render_template("err_404.html"), 404
@app_instance.errorhandler(500)
def internal_server_error(err):
db_instance.session.rollback()
return render_template("err_500.html"), 500
如果说我通过手机 api.
收到 500 错误,我不希望我的手机 api 进入这些错误页面有没有办法绕过或自定义某些路由(api)的错误处理程序,以便returns json响应而不是我的自定义错误页面
您可以深入了解请求的详细信息以确定 URL 路径。如果路径以 /api/
为前缀,那么您可以将其视为 API 请求和 return 一个 JSON 响应。
from flask import request, jsonify
API_PATH_PREFIX = '/api/'
@app_instance.errorhandler(404)
def page_not_found_error(error):
if request.path.startswith(API_PATH_PREFIX):
return jsonify({'error': True, 'msg': 'API endpoint {!r} does not exist on this server'.format(request.path)}), error.code
return render_template('err_{}.html'.format(error.code)), error.code
这并不理想。我认为您可能已经能够使用 Flask 蓝图来处理这个问题,但是特定于蓝图的错误处理程序不适用于 404,而是调用应用程序级别的处理程序。