Cha*_* Jc 7 python json dictionary httpresponse flask
我有根据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})
Run Code Online (Sandbox Code Playgroud)
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()
Run Code Online (Sandbox Code Playgroud)
POST从两者发送请求和检索响应/getuser_dict并且/getuser_jsonify是相同的(不相关的部分被省略):
> 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
Run Code Online (Sandbox Code Playgroud)
回到dict国内唯一要退什么类型的对象的检查,是string,tuple,BaseResponse或dict。当它决定你真正回归dict的isinstance(rv, dict),它要求jsonify(rv)你的dict对象,并返回。
请看一下 的make_response方法app.py。它检查的部分是 dict 对象也在那里。
| 归档时间: |
|
| 查看次数: |
703 次 |
| 最近记录: |