Flask Restful:如何使用 fields.Dict() 记录响应主体?

2024-03-30

In flask-restplus,我想对具有嵌套列表结构的响应体进行建模,因此每当进行 api 调用时,响应体都会返回我期望的内容。在响应主体中,它有一个嵌套结构,我不知道如何记录它。我要使用吗fields.Dict()?谁能告诉我如何实现这一点flask-restplus?

响应体:

{
  "score": 0,
  "category": "low",
  "guidance": "string",
  "is_ready": true,
  "used_features": [
    {
      "name": "hear_rate",
      "value": 1002,
      "range_value": [
        10,
        1000,
        10000,
        20000
      ],
      "range_frequency": [
        80,
        15,
        2,
        1
      ],
      "importance": 1
    },
    {
      "name": "pressure",
      "value": 400,
      "range_value": [
        10,
        1000,
        3000
      ],
      "range_frequency": [
        85,
        10,
        5
      ],
      "importance": 2
    }
  ]
}

我的部分解决方案:

这是我的部分解决方案

from flask import Flask, jsonify
from flask_restplus import Api, Resource, fields, reqparse, inputs

app = Flask(__name__)
api = Api(app)
ns = api.namespace('ns')

payload = api.model('Payload', {
    'score': fields.Integer,
    'category': fields.String,
    'guidance': fields.String,
    'is_ready': fields.Boolean,
    ## how to add used features arrays
})


@ns.route('/')
class AResource(Resource):
    @ns.expect(payload)
    def get(self):
        parser = reqparse.RequestParser()
        parser.add_argument('score', type=str, required=True)
        parser.add_argument('category', type=str, required=True)
        parser.add_argument('guidance', type=str, required=True)
        parser.add_argument('category', type=str, required=True)
        parser.add_argument('is_ready', type= bool, required=True)
        try:  # Will raise an error if date can't be parsed.
            args = parser.parse_args()  # type "dict"
            return jsonify(args)
        except:
            return None, 400

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

在我尝试的代码中,我无法想出如何建模的解决方案used_features字典。有什么办法可以解决上述尝试的缺陷吗?谁能指出我如何进行这项工作,以便我可以正确地对响应主体进行建模?我要使用吗Dict or Nested在我的代码中?还有什么想法吗?谢谢


Use @ns.marshal_with(有效负载).

装饰器 marshal_with() 实际获取数据对象并应用字段过滤。编组可以作用于单个对象、字典或对象列表。 编组资源链接:https://flaskrestplus.readthedocs.io/en/stable/marshalling.html https://flaskrestplus.readthedocs.io/en/stable/marshalling.html

并进行建模使用过的功能使用 fields.Nested。我已经在下面的代码中展示了如何使用它。


from flask import Flask, jsonify
from flask_restplus import Namespace, Resource, fields, reqparse
from flask_restplus import Api

app = Flask(__name__)
api = Api(app)
ns = api.namespace('ns')


used_features = {}
used_features['name'] = fields.String(attribute='name')
used_features['value'] = fields.Integer(attribute='value')
used_features['range_value'] = fields.List(
    fields.Integer, attribute='range_value')
used_features['range_frequency'] = fields.List(
    fields.Integer, attribute='range_frequency')
used_features['importance'] = fields.Integer(attribute='importance')

used_features_payload = api.model('feature_payload', used_features)

payload = api.model('Payload', {
    'score': fields.Integer,
    'category': fields.String,
    'guidance': fields.String,
    'is_ready': fields.Boolean,
    'used_features': fields.Nested(used_features_payload)
    # how to add used features arrays
})


@ns.route('/')
class AResource(Resource):
    @ns.expect(payload)
    @ns.marshal_with(payload)
    def get(self):
        parser = reqparse.RequestParser()
        parser.add_argument('score', type=str, required=True)
        parser.add_argument('category', type=str, required=True)
        parser.add_argument('guidance', type=str, required=True)
        parser.add_argument('category', type=str, required=True)
        parser.add_argument('is_ready', type=bool, required=True)
        try:  # Will raise an error if date can't be parsed.
            args = parser.parse_args()  # type "dict"
            return jsonify(args)
        except:
            return None, 400


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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flask Restful:如何使用 fields.Dict() 记录响应主体? 的相关文章

随机推荐