Flask-Swagger-UI无法识别swagger.json的路径

时间:2019-04-17 17:33:30

标签: flask swagger-ui flask-restful

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

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

enter image description here

我的代码

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

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

3 个答案:

答案 0 :(得分:1)

我认为这是对烧瓶末端的限制,但看来您必须将静态文件放置在烧瓶应用程序根目录中明确命名为static/的文件夹中。

尝试更改

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

API_URL = '/static/swagger.json'

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

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

答案 1 :(得分:1)

我们无法为 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'

答案 2 :(得分:0)

检查启用的扩展程序,例如CORS和AdBlock。