2

我正在尝试使用 flask-restx 和 marshmallow 创建一个宁静的 Web 服务。

我将棉花糖用于请求和响应验证。

由于flask-restx api docs不支持swagger ui中的棉花糖模式,我想使用doc装饰器添加它。

控制器代码:

@ns.route('/')
class Test(Resource):
    @ns.doc(params={'test': 'test'})
    def get(self):
        _input_schema = MySchema()
        errors = _input_schema.validate(request.args)
        if errors:
            return Response(str(errors), status=400)
        other_things()

架构代码:

class MySchema(Schema):
    title = fields.Str()
    id = fields.Integer()
    slug = fields.Str()

我正在尝试将参数从架构自动添加到 api 文档中

@ns.doc(params=MySchema.ReturnAFieldDict())

它会给出类似的东西

@ns.doc(params={"title":"A string", "id": "Int value with min and max", "slug":"A str"})

有没有办法做到这一点?

4

2 回答 2

1

您可以使用 api.marshal_with 来记录响应

from flask_restx.fields import Integer, String
test_get = api.model(
    "TestGet",
    {
        "name": String(required=True),
        "age": Integer(required=True),
    },
)
@api.marshal_with(schema.test_get, code=200)
def get(self):
    return {"name": "test", "age": 123}

marshal_with 映射返回的字典或对象,并根据模式映射字段。在这里,在这种情况下,返回的字典将映射到 test_get 模式,其中名称将为“test”,年龄将为 123。

于 2021-11-09T20:26:33.750 回答
0

我发现获取文档的一种方法是使用 @api.expect(schema) 装饰器。

于 2021-09-10T14:46:37.070 回答