簡體   English   中英

Flask - 返回 jsonify 與 dict 有什么區別?

[英]Flask - What is difference when returning jsonify vs dict?

我有路由可以在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})

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請求和檢索響應是相同的(不相關的部分省略):

> POST ...
> 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僅檢查您返回的是什么類型的 object,是stringtupleBaseResponse還是dict 當它確定您確實通過isinstance(rv, dict)返回dict時,它會在您的dict object 上調用jsonify(rv)並返回。

請看一下app.py 的 make_response app.py 檢查的部分是 dict object也在那里。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM