空值显示在下面的代码中的restplus过帐方法中

2024-03-29 02:29:42 发布

您现在位置:Python中文网/ 问答频道 /正文

from flask import Flask,jsonify,json,request,Response
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):
        self.parser= reqparse.RequestParser()
    def get(self):
        return jsonify({'details':company_detaile})


    def post(self):
        self.parser.add_argument("name", action='append', location='json', type=str)
        self.parser.add_argument("age", action='append', location='json', type=int)
        self.parser.add_argument("company", action='append', location='json', type=str)
        self.parser.add_argument("sex", action='append', location='json', type=str)
        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)


当我试图张贴这将显示。我用的工具是邮递员

{
  "details": [
    {
      "age": 45, 
      "company": "pix", 
      "name": "nithin", 
      "sex": "male"
    }, 
    {
      "age": null, 
      "company": null, 
      "name": null, 
      "sex": null
    }
  ]
}

我如何解决这个错误?在注释部分,请随意询问我省略的代码行的详细信息。请帮我解决这个错误


Tags: nameselfaddjsonparseragetypeargs
1条回答
网友
1楼 · 发布于 2024-03-29 02:29:42

您不想让解析器在post方法中添加参数。将其移出方法并添加decorator @api.expect(parser)将允许您正确解析参数

还值得注意的是,现在应该使用flask-restx而不是flasku restplus,因为不再维护restplus

from flask import Flask, jsonify, request
from flask_restx import Api, reqparse, Resource

app = Flask(__name__)
api = Api(app)

company_detaile = [{"name": "nithin", "age": 45, "company": "pix", "sex": "male"}]

parser = reqparse.RequestParser()
parser.add_argument("name", location="json", type=str)
parser.add_argument("age", location="json", type=int)
parser.add_argument("company", location="json", type=str)
parser.add_argument("sex", location="json", type=str)


@api.route("/hello", methods=["POST", "GET"])
class Member(Resource):
    def get(self):
        return jsonify({"details": company_detaile})

    @api.expect(parser)
    def post(self):
        company_detaile.append(request.json)
        return jsonify({"details": company_detaile})


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

测试

curl -X POST "http://localhost:5000/hello" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \"name\": \"John Smith\", \"age\": 42, \"company\": \"Aperture Science\", \"sex\": \"Male\"}"

返回

{
  "details": [
    {
      "age": 45,
      "company": "pix",
      "name": "nithin",
      "sex": "male"
    },
    {
      "age": 42,
      "company": "Aperture Science",
      "name": "John Smith",
      "sex": "Male"
    }
  ]
}

相关问题 更多 >