Flask API的POST端点无法正常工作,请求持续处于处理状态
Flask POST端点请求卡住无响应的排查与解决
核心问题分析
请求一直处于in progress且无控制台输出,本质是reqparse.RequestParser()默认不处理application/json格式的请求体。当你设置该请求头后,解析器无法正确读取参数,导致请求阻塞在parser.parse_args()步骤,后续代码根本没执行。
解决步骤
1. 让reqparse支持JSON请求体
修改请求解析器,添加location='json'参数,指定从JSON格式的请求体中读取参数:
parser = reqparse.RequestParser() parser.add_argument('text', required=True, location='json')
2. 替换Pandas弃用方法
pd.DataFrame.append()已被官方弃用,改用pd.concat()避免后续潜在报错:
# 替换原data.append(new_data...)代码 data = pd.concat([data, new_data], ignore_index=True)
3. 返回标准JSON响应
Flask-RESTful要求资源方法返回JSON格式响应,纯数字状态码可能导致客户端处理异常:
return {'status': 'success'}, 200
4. 验证文件路径(Pydroid环境)
在Pydroid 3中,确保words.csv和脚本在同一工作目录,可添加代码确认:
import os print(os.getcwd()) # 打印当前目录,核对文件位置
如果文件不存在,建议添加创建逻辑,避免读取报错:
if not os.path.exists('words.csv'): new_data.to_csv('words.csv', index=False) return {'status': 'success', 'msg': '文件已创建'}, 200
完整修复后的Upload类代码
class Upload(Resource): def post(self): parser = reqparse.RequestParser() parser.add_argument('text', required=True, location='json') print(1) args = parser.parse_args() print(2) new_data = pd.DataFrame({ 'id': random.randint(0,1000), 'text': args['text'] }) print(3) import os if not os.path.exists('words.csv'): new_data.to_csv('words.csv', index=False) print("文件已创建并写入") return {'status': 'success'}, 200 data = pd.read_csv('words.csv') data = pd.concat([data, new_data], ignore_index=True) print(4) data.to_csv('words.csv', index=False) return {'status': 'success'}, 200
测试注意事项
- 发送POST请求时,请求体必须是JSON格式(如
{"text": "测试内容"}),同时保持Content-Type: application/json请求头。 - 在Pydroid控制台查看输出,确认
1、2、3、4依次打印,定位是否还有其他阻塞点。
内容的提问来源于stack exchange,提问作者Smell Machine
相关产品推荐
相关产品推荐

