Python Flask – json和html 404错误

我正在家里制作一个在树莓派上运行的小型网络界面.它托管一些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明显的限制,没有biggy.

点赞