首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >flasgger:.py模块中的参考棉花糖模式

flasgger:.py模块中的参考棉花糖模式
EN

Stack Overflow用户
提问于 2020-07-01 15:12:51
回答 1查看 1K关注 0票数 1

我在一个Schema模块中定义了带有Marshmallow schemas类的烧瓶项目。例如:

代码语言:javascript
复制
project 
  - app.py
  - routes.py
  - schemas/
     - schema1.py
     - schema2.py

其中schema1.py是典型的棉花糖Schema

代码语言:javascript
复制
class FooSchema(Schema):
    name = fields.Str()

闪光机文档显示,可以在路由的docstring中引用架构。这里有一个节略的片段

代码语言:javascript
复制
@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'有关棉花糖模式的示例在其他方面对我来说并不清楚。

EN

回答 1

Stack Overflow用户

发布于 2020-12-22 19:26:00

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

代码语言:javascript
复制
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'语法。

您可能会发现这个片段很有用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62679935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档