【问题标题】:Flask-Swagger-UI does not recognize path to swagger.jsonFlask-Swagger-UI 无法识别 swagger.json 的路径
【发布时间】:2019-04-17 17:33:29
【问题描述】:

我正在构建一个 API,使用 Flask、flask-restful 和 flask-swagger-ui。我现在已经修改了项目结构,现在我不能再访问项目的 swagger.json 文件了。

根据包文档flask-swagger-ui,您只需将参数 API_URL 更改为正确的路径。但即使输入相对路径或完整路径,我也无法再访问该文件。

我的代码

from flask import Flask, jsonify
from flask_migrate import Migrate
from flask_restful import Api
from flask_swagger_ui import get_swaggerui_blueprint

def create_app(config_name):

    app = Flask(__name__)

    app.config.from_object(config[config_name])

    api = Api(app, prefix="/api/v1")

    '''swagger specific'''
    SWAGGER_URL = '/api/v1/docs'
    # API_URL = 'templates/swagger.json'
    API_URL = 'app/templates/docs/swagger.json'
    SWAGGERUI_BLUEPRINT = get_swaggerui_blueprint(
        SWAGGER_URL,
        API_URL,
        config={
            'app_name': "My Rest App"
        }
    )

    app.register_blueprint(SWAGGERUI_BLUEPRINT, url_prefix=SWAGGER_URL)

    db.init_app(app)
    Migrate(app, db)

    return app

我的树结构:

├── API
│   ├── app
│   │   ├── __init__.py
│   │   ├── models
│   │   │   ├── __init__.py
│   │   │   ├── db.py  
│   │   │   └── db2.py
│   │   ├── routes
│   │   │   ├── __init__.py
│   │   │   ├── resources.py
│   │   └── templates
│   │       └── docs
│   │           └── swagger.json
│   ├── app.db
│   ├── config.py
│   ├── main.py
│   ├── migrations
│   ├── requeriments
│   └── tests
└── README.md

我需要帮助,以了解文件路径的问题,从而纠正问题。

【问题讨论】:

  • 有人知道这个吗?
  • @vic.py 你找到解决办法了吗?

标签: flask swagger-ui flask-restful


【解决方案1】:

我认为这是对烧瓶结束的限制,但您似乎必须将静态文件放在烧瓶应用根目录中明确命名为 static/ 的文件夹中。

尝试改变

API_URL = 'app/templates/docs/swagger.json'

API_URL = '/static/swagger.json'

然后在API/app/ 中创建一个static/ 文件夹,并将您的json 移入其中。像这样:API/app/static/swagger.json

如果这不起作用,请确保 static/ 文件夹位于正确的目录中,在定义您的烧瓶应用程序变量后尝试 print(app.root_path) 以查看烧瓶认为根路径是什么。

【讨论】:

  • API_URL 中还需要包含前导 '/'
【解决方案2】:

我们无法为 swagger.json 提供任何自定义文件路径。

但是,如果您需要,我们可以解决一个问题。 我遇到了同样的问题,我需要为 swagger URL 和 swagger.json 提供不同的前缀。 如果我们只想从不同的前缀而不是 '/static/swagger.json' 提供 swagger.json 文件:

然后进行如下修改:

APP = Flask(__name__, static_url_path = '/my-prefix/static')
API_URL = '/my-prefix/static/swagger.json'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 2016-09-11
    • 2015-04-19
    • 2021-09-21
    相关资源
    最近更新 更多