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

vic*_*.py 5 flask swagger-ui flask-restful

我正在构建一个 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
Run Code Online (Sandbox Code Playgroud)

我的树结构:

??? 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

Run Code Online (Sandbox Code Playgroud)

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

Sni*_*ppy 7

我相信这是对 Flask 端的限制,但似乎您必须static/将静态文件放置在Flask 应用程序根目录下明确命名的文件夹中。

尝试改变

API_URL = 'app/templates/docs/swagger.json'
Run Code Online (Sandbox Code Playgroud)

API_URL = '/static/swagger.json'
Run Code Online (Sandbox Code Playgroud)

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

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