Python Flask应用程序未返回JSON错误
我正在创建一个flask应用程序,我使用它总是返回JSON错误,而不是HTTP错误 我对Flask还很陌生,但据我所知,它应该用JSON替换所有错误,但对我来说不是这样 例如,如果我访问的url不是由/users1而不是/users处理的,我会得到一个JSON响应。但如果我尝试访问/user/10,但id为10的用户不存在,我会在以下代码中得到一个错误:Python Flask应用程序未返回JSON错误,python,json,flask,Python,Json,Flask,我正在创建一个flask应用程序,我使用它总是返回JSON错误,而不是HTTP错误 我对Flask还很陌生,但据我所知,它应该用JSON替换所有错误,但对我来说不是这样 例如,如果我访问的url不是由/users1而不是/users处理的,我会得到一个JSON响应。但如果我尝试访问/user/10,但id为10的用户不存在,我会在以下代码中得到一个错误: @app.route('/users/<id>', methods=['GET']) def get_user(id):
@app.route('/users/<id>', methods=['GET'])
def get_user(id):
user = queries.get_single_user(id)
return jsonify(
{ 'data' : user.serialize() }
)
因为在这种情况下user是None,所以我得到了一个异常,这很好,但是会向客户端发送一个HTTP响应,而不是JSON
为什么会出现这种情况?我如何仅在出现错误时发送JSON?我知道我可以制造自己的错误并尝试/捕获,但这不是我想要的
我的问题是,如何包装所有错误响应并只发送JSON,而不发送HTTP,您可以将用户=。。。try/except下的语句,并始终返回jsonifydict,如下所示:
@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响应。您还可以使用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")
您的客户端得到了什么HTTP响应?这大约是500个吗?你能粘贴一个什么样的查询的样本吗?get_single_userid返回?这并不能回答问题。OP询问为什么错误以HTML而不是JSON的形式发送。是的,就像Erik说的,这并没有回答我的问题。我想知道为什么我的响应不是以JSON的形式而不是HTTP的形式。但是,您的jsonify语法比我的好得多,谢谢!