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

Flask-RESTPlus POST接口提交后出现null值问题求助

问题原因分析

你遇到的新增字段全部为null的问题,核心是两个关键错误导致的:

  1. 错误使用action='append'参数:这个参数会让reqparse把对应字段的值解析成列表(数组),但你的POST请求应该是发送单个对象的字段值(比如{"name":"alice", "age":30}),而非数组格式,解析器匹配不到正确值,最终返回null。
  2. 请求解析器参数重复注册:你在post()方法里每次调用add_argument,会导致参数被重复添加,多次请求后会引发解析逻辑混乱,进一步导致值解析失败。
修复后的代码
from flask import Flask, jsonify
from flask_restplus import Api, reqparse, Resource

app = Flask(__name__)
api = Api(app)
company_detaile = [{'name': 'nithin', 'age': 45, 'company': 'pix', 'sex': 'male'}]

@api.route('/hello')
class Member(Resource):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # 初始化请求解析器,一次性添加所有需要的参数
        self.parser = reqparse.RequestParser()
        self.parser.add_argument("name", location='json', type=str)
        self.parser.add_argument("age", location='json', type=int)
        self.parser.add_argument("company", location='json', type=str)
        self.parser.add_argument("sex", location='json', type=str)

    def get(self):
        return jsonify({'details': company_detaile})

    def post(self):
        args = self.parser.parse_args()
        # 将解析后的单个对象添加到列表中
        company_detaile.append(args)
        print("新增条目:", args)
        print("当前所有条目:", company_detaile)
        return jsonify({"append_detaile": 'ok'})

if __name__ == '__main__':
    app.run(debug=True)
关键修改说明
  • 移除action='append':让解析器默认接收单个字段值,匹配常规的JSON对象请求格式。
  • 将参数定义移至__init__方法:只初始化一次解析器和参数,避免重复添加引发的解析异常。
  • 可选优化:添加required=True:如果需要强制POST请求包含所有字段,可以给每个add_argument加上这个参数,避免因缺字段导致的null值。
测试方法

用Postman发送POST请求到http://localhost:5000/hello,请求体选择raw→JSON,输入如下示例内容:

{
    "name": "alice",
    "age": 30,
    "company": "test corp",
    "sex": "female"
}

之后调用GET接口,就能看到新增条目所有字段值都正常显示了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 10:42:42