2017-06-18 90 views
3

我正在一个小型web界面上运行一个覆盆子pi在家里。它承载了一些REST API以及一些网页。Python烧瓶 ​​- json和html 404错误

我正在使用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。

所以我已经覆盖了的ErrorHandler:

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

不过,现在所有的错误返回JSON,而不仅仅是API错误。

所以我的问题,我怎样才能使API失败的请求返回json错误,但其他错误默认的html错误页面?

+0

@ cricket_007哦,目前这只是一个全局变量,尽管稍后将被代码寻找数据库中的任务所取代。 –

+0

做一个自定义的装饰器来处理失败的api请求 –

+0

@TheOddler任何方式什么是任务或在何处定义在这方面无关 –

回答

0

我发现解决这个问题的最好方法是使用蓝图。

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

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