Flask框架中如何获取POST请求传入的数据?
Flask框架中如何获取POST请求传入的数据?
嘿,我看了你遇到的问题啦,其实是你用错了获取请求数据的方式~ 我来给你分两种常见情况说清楚怎么改:
情况1:你当前用的表单格式传参(requests.post的data参数)
你现在用requests.post(url, data={"id":"good"})发送请求时,默认会把数据以x-www-form-urlencoded(表单编码)的格式发送到后端。这种情况下,Flask里不能用request.data来取数据,得用request.form对象:
修改你的create_task函数试试:
@app.route('/task/create',methods=["post"]) def create_task(): # 获取表单格式的参数,用get方法可以避免key不存在时报错 task_id = request.form.get("id") print(f"拿到的id是:{task_id}") # 也可以直接返回结构化响应 return jsonify({"status": "success", "received_id": task_id})
这样你再运行测试代码,就能正常拿到id的值啦!
情况2:如果想传JSON格式的参数(更适合API场景)
如果你的接口是给前端/其他服务传JSON数据用的,推荐用JSON格式传参,处理起来更规范。你需要同时修改测试代码和Flask接口:
先改测试的请求代码:
import requests url = 'http://localhost:5000/task/create' # 用json参数替代data,requests会自动把数据转成JSON并设置正确的请求头 r = requests.post(url, json={"id":"good"}) print(r.text)
再改Flask的create_task函数:
@app.route('/task/create',methods=["post"]) def create_task(): # 解析JSON格式的请求体,get_json()会自动识别application/json请求头 request_data = request.get_json() # 可以先判断是否拿到了有效数据 if not request_data: return jsonify({"error": "未收到有效JSON数据"}), 400 task_id = request_data.get("id") print(f"拿到的id是:{task_id}") return jsonify({"status": "success", "received_id": task_id})
这样就能正常获取JSON格式的请求数据了。
补充说明几个对象的区别
request.data:一般用来获取非表单格式的原始请求体(比如自定义编码的字符串、二进制数据),你当前的请求是表单格式,所以它会返回空的b''。request.form:专门用来处理x-www-form-urlencoded或multipart/form-data格式的表单参数。request.get_json():用来解析application/json格式的请求体,返回解析后的Python字典,比直接用request.json更稳妥(可以处理异常情况)。
你可以根据自己的实际业务场景选其中一种方式来修改代码~
备注:内容来源于stack exchange,提问作者user2155362
相关产品推荐
相关产品推荐

