Flask应用程序不返回JSON错误

时间:2014-11-16 21:13:10

标签: python json flask

我正在创建一个烧瓶应用,我正在使用this snippet来返回JSON错误而不是HTTP。

我对Flask很新,但是我理解它的片段应该用JSON替换所有错误,但它不会对我这样做。

例如,如果我访问的是未由Flask路由(/users1而非/users)处理的网址,则会收到JSON响应。但是,如果我尝试访问/user/10并且ID为10的用户不存在,则此代码中出现错误:

@app.route('/users/<id>', methods=['GET'])
def get_user(id):
    user = queries.get_single_user(id)

    return jsonify(
        { 'data' : user.serialize() }
    )

由于在这种情况下用户是None,我得到一个例外,这很好,但是对客户端发送HTTP响应,而不是JSON。

为什么会这样,如何在发生错误时只发送JSON?我知道我可以创建自己的错误并尝试/​​捕获,但这不是我想要的。

我的问题是,如何包装所有错误响应并仅发送JSON,而不是HTTP

2 个答案:

答案 0 :(得分:0)

您可以将user = ...声明置于try/except下并始终返回jsonify(dict),如下所示:

@app.route('/users/<id>', methods=['GET'])
def get_user(id):
    try:
        user = queries.get_single_user(id)
        res = {'data': user.serialize()}
    except User.DoesNotExist: # or except the specific Error you get from above
        res = {'data': 'user not found'}

    return jsonify(res)

您还可以使用代码段更新res响应。

答案 1 :(得分:0)

您还可以使用Flask jsonify方法,如下所示:

@app.route('/users/<id>', methods=['GET'])
def get_user(id):
    user = queries.get_single_user(id)
    if user:
        return jsonify(data=user.serialize())

    return jsonify(data="No results found")