为json返回api定制烧瓶错误处理程序

时间:2018-03-31 10:39:08

标签: python flask error-handling custom-error-handling

我有一个烧瓶应用程序,它有两种类型的路径:

(1)。网站路线,如/ home,/ user /,/ news_feed

(2)。 json为移动应用程序返回apis,例如/ api / user,/ api / weather等。

我通过烧瓶提供的@ app.errorhandler装饰器使用404和500等常见错误的自定义错误页面 - for my website

@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错误,我不希望我的移动apis返回这些错误页面。

是否有办法绕过或自定义某些路由(api)的错误处理程序,以便它返回json响应而不是我的自定义错误页面

1 个答案:

答案 0 :(得分:4)

您可以深入了解请求的详细信息以确定URL路径。如果路径以/api/作为前缀,那么您可以将其视为API请求并返回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,而是调用应用程序级别处理程序。