Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Flask应用程序未返回JSON错误_Python_Json_Flask - Fatal编程技术网

Python Flask应用程序未返回JSON错误

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):

我正在创建一个flask应用程序,我使用它总是返回JSON错误,而不是HTTP错误

我对Flask还很陌生,但据我所知,它应该用JSON替换所有错误,但对我来说不是这样

例如,如果我访问的url不是由/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() }
    )
因为在这种情况下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语法比我的好得多,谢谢!