我正在创建一个烧瓶应用,我正在使用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
答案 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")