Python Flask - json 和 html 404 错误

标签 python flask

我正在制作一个在家里的树莓派上运行的小型网络界面。它承载了一些 REST API 以及一些网页。

我正在使用 Flask,并且有一个路由 '/' 用于索引,还有一些路由用于 REST api '/api/v1.0/tasks'.

@app.route('/') 
def index():
    return render_template('index.html')

@app.route('/gnodes/api/v1.0/tasks', methods=['GET'])
def get_tasks():
    return jsonify({'tasks': tasks})

@app.route('/gnodes/api/v1.0/tasks/<int:task_id>', methods=['GET'])
def get_task(task_id):
    task = [task for task in tasks if task['id'] == task_id]
    if not task:
        abort(404)
    return jsonify({'task': task[0]})

但是,abort(404) 返回一个 html 错误页面,这对于普通页面来说没问题,但我想在请求不存在的任务时返回一个 json。

所以我已经覆盖了错误处理程序:

@app.errorhandler(404)
def not_found(error):
    return make_response(jsonify({'error': 'Not found'}), 404)

但是,现在所有错误都返回 json,而不仅仅是 api 错误。

所以我的问题是,如何向 API 发出失败的请求返回 json 错误,而其他错误返回默认的 html 错误页面?

最佳答案

我发现解决此问题的最佳方法是使用蓝图。

我将我的 API 放在它自己的蓝图中,在那里我可以单独为该蓝图定义一个错误处理程序。

唯一的问题是,当 api 中存在不存在的页面时,将使用默认的错误处理程序,而不是我为 api-blueprint 定义的错误处理程序。也有一些解决方法,但这显然是 Flask 的局限性,没什么大不了的。

关于Python Flask - json 和 html 404 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44618005/

相关文章:

python - 属性错误 : type object 'User' has no attribute 'get'

python - flask 日志记录 - 无法将其写入文件

Python - urllib.request 和 Flask

python - flask 中的多语言网址

android - 使用 Kivy 访问 Android 相机时出现错误

python - 如何自定义 Cerberus 的错误信息?

python - Geoviews + Datashader 投影点时速度很慢

azure - 在 Azure 门户中哪里可以找到 web.config?

python - 以编程方式从共享邮箱发送 outlook 电子邮件

python - 如何使用 RDFLib 解析大数据集?