【问题标题】:customizing flask error handlers for json returning api为 json 返回 api 自定义烧瓶错误处理程序
【发布时间】:2018-09-10 05:26:25
【问题描述】:

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

(1)。网站路径,例如 /home、/user/、/news_feed

(2)。 json 返回移动应用的 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)的错误处理程序,以便它返回 json 响应而不是我的自定义错误页面

【问题讨论】:

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


    【解决方案1】:

    您可以深入了解请求的详细信息以确定 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,而是调用了应用程序级别的处理程序。

    【讨论】:

    • 谢谢,这解决了我的问题。它是一个小型项目原型,所以我暂时不使用蓝图,但很高兴知道。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    • 1970-01-01
    • 2011-10-02
    • 2020-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多