Flask-返回jsonify和dict的区别是什么?

时间:2019-11-04 14:44:57

标签: python json dictionary flask httpresponse

我有一条路由,可以根据POST请求将响应返回给用户。我应要求返回dict。问题是在某些情况下,返回dict可以正常工作,但有时会引发错误。

任何人都可以解释理想的返回类型是什么,为什么在某些情况下dict返回成功?

@app.route('/getuser', methods = ['post'] )
def getusername():
    user = request.json.get("user_name")

    # This works good for few cases
    return {"username": user}

    # Whereas other require this
    return jsonify({"username": user})

1 个答案:

答案 0 :(得分:1)

TLDR 没有区别。


基本示例:

from flask import Flask, request, jsonify

app = Flask(__name__)


@app.route('/getuser_dict', methods=['POST'])
def getuser_dict():
    user = request.json.get("user_name")
    return {"username": user}


@app.route('/getuser_jsonify', methods=['POST'])
def getuser_jsonify():
    user = request.json.get("user_name")
    return jsonify({"username": user})


if __name__ == '__main__':
    app.run()

/getuser_dict/getuser_jsonify的请求和响应相同(无关部分):

> POST /getuser_dict HTTP/1.1
> Host: 127.0.0.1:5000
> User-Agent: insomnia/7.0.3
> Content-Type: application/json
> Accept: */*
> Content-Length: 24

| {
|   "user_name": "John"
| }

* upload completely sent off: 24 out of 24 bytes
* HTTP 1.0, assume close after body

< HTTP/1.0 200 OK
< Content-Type: application/json
< Content-Length: 20
< Server: Werkzeug/0.16.0 Python/3.6.8
< Date: Wed, 06 Nov 2019 09:34:51 GMT


* Received 20 B chunk
* Closing connection 65

内部返回dict仅检查您返回的对象类型是stringtupleBaseResponse还是dict。当它确定您确实通过dict返回isinstance(rv, dict)时,它将在您的jsonify(rv)对象上调用dict并返回。

请查看app.py的{​​{3}}方法。 make_response所在的部分也在那里。

相关问题