我有一个简单的 Flask 应用程序(Flask 版本1.0.3
),只有一个应用程序。/ask
用于处理(名称、值)对的 POST 查询字符串的URL 和处理程序,但该request.args
对象不存储所有参数对,仅存储第一对。为什么其他人都退学了?
我已经尝试打印出该request.args
对象,但它只显示第一个参数对。
这是 Flask 应用程序
import json
from flask import (
Flask,
jsonify,
request,
Response
)
app = Flask(__name__)
@app.route('/')
def home():
return jsonify(message="Hello, World!")
@app.route('/ask', methods=['POST'])
def ask():
return str(request.args)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=True)
Run Code Online (Sandbox Code Playgroud)
这是使用 CLI 工具的简单查询http
,带有两个参数和响应参数 - 请注意响应参数仅包含第一个参数
$ http POST http://127.0.0.1:5000/ask?q1=name&q2=address
[1] 58720
[2019-06-12 15:29:27 $ HTTP/1.0 200 OK
Content-Length: 36
Content-Type: text/html; charset=utf-8
Date: Wed, 12 Jun 2019 14:29:27 GMT
Server: Werkzeug/0.15.4 Python/3.6.2
ImmutableMultiDict([('q1', 'name')])
Run Code Online (Sandbox Code Playgroud)
我使用得到相同的结果curl
curl -X POST http://127.0.0.1:5000/nest?q1=name&q2=address
Run Code Online (Sandbox Code Playgroud)
我有什么遗漏的吗
在 shell 中“&”是关键字,必须用引号引起来。在两个示例中,“&”之后的所有内容都作为第二个命令执行。将您的测试更改为:
http POST "http://127.0.0.1:5000/ask?q1=name&q2=address"
Run Code Online (Sandbox Code Playgroud)