当你在使用 Flask 开发 Web 应用时,可能会遇到 request.form
为空,而 request.get_data()
不为空的情况。这种情况通常发生在请求的内容类型(Content-Type)不是 application/x-www-form-urlencoded
或 multipart/form-data
时。
application/x-www-form-urlencoded
和 multipart/form-data
类型的请求。application/x-www-form-urlencoded
或 multipart/form-data
,Flask 将不会解析表单数据,导致 request.form
为空。确保客户端发送的请求头中包含正确的 Content-Type
。例如,如果你发送的是 JSON 数据,应该设置 Content-Type
为 application/json
。
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/endpoint', methods=['POST'])
def handle_request():
if request.content_type == 'application/json':
data = request.get_json()
return jsonify(data)
elif request.content_type in ['application/x-www-form-urlencoded', 'multipart/form-data']:
form_data = request.form
return jsonify(form_data)
else:
return "Unsupported Media Type", 415
if __name__ == '__main__':
app.run(debug=True)
如果你不确定请求的内容类型,可以使用 request.get_data()
手动解析请求体。
from flask import Flask, request, jsonify
import json
app = Flask(__name__)
@app.route('/endpoint', methods=['POST'])
def handle_request():
raw_data = request.get_data(as_text=True)
try:
data = json.loads(raw_data)
return jsonify(data)
except json.JSONDecodeError:
return "Invalid JSON", 400
if __name__ == '__main__':
app.run(debug=True)
multipart/form-data
,但在某些情况下,客户端可能会以不同的格式发送数据。request.form
为空而 request.get_data()
不为空通常是由于请求的内容类型不正确或请求体中包含非表单数据。通过检查请求的内容类型并相应地处理数据,可以解决这个问题。
领取专属 10元无门槛券
手把手带您无忧上云