如何在 Flask-restx Swagger UI 中自动使用 Marshmallow Schema

Ang*_* G. 10 flask swagger-ui marshmallow flask-restx

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

我使用棉花糖进行请求和响应验证。

由于 Flask-restx api 文档不支持 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()
Run Code Online (Sandbox Code Playgroud)

架构代码:

class MySchema(Schema):
    title = fields.Str()
    id = fields.Integer()
    slug = fields.Str()
Run Code Online (Sandbox Code Playgroud)

我正在尝试自动将参数从 schema 添加到 api 文档,如下所示

@ns.doc(params=MySchema.ReturnAFieldDict())
Run Code Online (Sandbox Code Playgroud)

它会给出类似的东西

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

有什么办法可以做到这一点吗?

Has*_*fan -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}
Run Code Online (Sandbox Code Playgroud)

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

  • 正如目前所写的,您的答案尚不清楚。请[编辑]添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。您可以[在帮助中心](/help/how-to-answer)找到有关如何写出好的答案的更多信息。 (5认同)
  • 虽然此代码可以回答问题,但提供有关如何和/或为何解决问题的附加上下文将提高​​答案的长期价值。 (2认同)