You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask POST方法失效求助:无法获取POST输入内容

问题分析与解决方案

核心问题

  1. 请求拆分导致字段缺失:客户端分两次发送POST请求,每次仅传递username或text中的一个,但Flask接口期望单次请求同时包含两个字段,因此每次请求都会触发400错误(request.form['xxx']找不到对应字段时会抛出BadRequest异常)。
  2. requests参数传递错误:直接将字典作为requests.post的第二个参数时,数据会被当作URL查询参数传递,而非表单数据,导致Flask的request.form无法读取到内容。

修复步骤

1. 修改客户端代码

将用户名和文本合并为一个字典,通过data参数一次性发送POST请求:

# 合并username和text到同一个字典
payload = {"username": userenter, "text": typed}
# 使用data参数传递表单数据
requests.post(send_url, data=payload)
typed = ''

2. 优化Flask端代码

  • 添加字段存在性检查,避免因缺失字段触发400错误;
  • 返回合法的HTTP响应(Flask视图必须返回响应内容,否则不符合规范):
from flask import Flask, request, jsonify

chat = {"Chat": ["Welcome to my chatting thing!\n"]}
app = Flask(__name__)

@app.route('/chat', methods=['POST'])
def chatt():
    global chat
    # 用get方法获取字段,不存在时返回默认值None
    username = request.form.get('username')
    text = request.form.get('text')
    
    # 检查字段是否存在
    if not username or not text:
        return jsonify({"error": "Missing username or text field"}), 400
    
    # 简化聊天内容追加逻辑
    chat["Chat"].append(f"{username}: {text}\n")
    return jsonify({"status": "success"}), 200

if __name__ == '__main__':
    app.run(debug=True)

额外建议

  • 避免使用global变量存储聊天记录,在多线程/多进程环境下会出现数据不一致问题,建议使用数据库或Redis等专业存储方案;
  • 开启Flask的调试模式(app.run(debug=True)),可以在控制台看到更详细的错误信息,便于快速排查问题。

内容的提问来源于stack exchange,提问作者Shadowy_Coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 03:15:23