0

我有一个烧瓶项目,它在模块中Schema定义了棉花糖类。schemas例如:

project 
  - app.py
  - routes.py
  - schemas/
     - schema1.py
     - schema2.py

哪里schema1.py是典型的棉花糖Schema

class FooSchema(Schema):
    name = fields.Str()

flasgger文档显示可以在路由的文档字符串中引用模式这是一个精简的片段

@app.route('/colors/<palette>/')
def colors(palette):
    """Example endpoint returning a list of colors by palette
    This is using docstrings for specifications.
    ---
    parameters:
      - name: palette
        in: path
        type: string
    definitions:
      Palette:
        type: object
        properties:
          palette_name:
            type: array
            items:
              $ref: '#/definitions/Color'     <--------
    responses:
      200:
        description: A list of colors (may be filtered by palette)
        schema:
          $ref: '#/definitions/Palette'
        examples:
          rgb: ['red', 'green', 'blue']
    """

感兴趣的线是$ref: '#/definitions/Palette'。但是,这只是definition对文档字符串中的部分的内部引用。

有没有办法只替换对schema/schema1.py模块的引用?换句话说,我们如何才能在同一个项目中放入对模块的模式引用

$ref: 'schema/schema1.py#FooSchema'......?关于棉花糖模式的例子对我来说不是很清楚。

4

1 回答 1

1

定义应在创建 Swagger 实例的模板中处理。例如,在您的情况下,您应该以下列方式定义您的 swagger 对象:

from apispec.ext.marshmallow import MarshmallowPlugin
from apispec_webframeworks.flask import FlaskPlugin
from flasgger import APISpec, Swagger


plugins = [FlaskPlugin(), MarshmallowPlugin()]
spec = APISpec("My api docs", '1.0', "2.0", plugins=plugins)
template = spec.to_flasgger(app, definitions=[FooSchema])
swagger =  Swagger(app, template=template, parse=True)

之后,您可以$ref: '#/definitions/Foo'在定义中使用:语法。

您可能会发现此代码段很有帮助。

于 2020-12-22T19:26:00.433 回答