Fastapi swagger-ui.css 、swagger-ui-bundle.js 无法加载

版本信息: python3.8 fastapi 0.78.0

问题:

        访问 /docs 查看接口文档是发现swagger资源无法加载(可能是npm宕机了)

Fastapi swagger-ui.css 、swagger-ui-bundle.js 无法加载_第1张图片

解决办法:

        尝试降低fastapi版本并未奏效,于是想下载下资源文件,改为本地静态资源加载

        github下载地址:

                  swagger-ui/dist at master · swagger-api/swagger-ui · GitHub

                  redoc
        百度网盘下载:
                链接:https://pan.baidu.com/s/1XyqTnqxHigWOGKN1soOoag?pwd=4xl3
                提取码:4xl3 
        1. 分别下载 swagger-ui.css 、swagger-ui-bundle.js,放置在本地static文件夹下

        2. 需要定位到源码中请求位置:

Fastapi swagger-ui.css 、swagger-ui-bundle.js 无法加载_第2张图片

                调用位置:

Fastapi swagger-ui.css 、swagger-ui-bundle.js 无法加载_第3张图片

      3.

        方法1. 很简单的做法就是直接在源码上修改这三个地址

        Fastapi swagger-ui.css 、swagger-ui-bundle.js 无法加载_第4张图片

        但是显然不够pythonic;

       方法 2. 也可以通过复制这个方法然后修改参数,通过sys.modules覆盖原有方法

        Fastapi swagger-ui.css 、swagger-ui-bundle.js 无法加载_第5张图片

    方法 3.  但是我要的很简单,只要修改参数就可以了(注意必须覆盖真实的调用位置fastapi.applications

def use_local_static():
    # 覆盖原有方法,使得swagger从本地加载静态资源
    sys.modules["fastapi.applications"].get_swagger_ui_html.__kwdefaults__["swagger_js_url"] = "/static/swagger/swagger-ui-bundle.js"
    sys.modules["fastapi.applications"].get_swagger_ui_html.__kwdefaults__["swagger_css_url"] = "/static/swagger/swagger-ui.css"
    sys.modules["fastapi.applications"].get_swagger_ui_html.__kwdefaults__["swagger_favicon_url"] = "/static/favicon.jpg"
 sys.modules["fastapi.applications"].get_redoc_html.__kwdefaults__["redoc_js_url"] = "/static/redoc/bundles/redoc.standalone.js"
    sys.modules["fastapi.applications"].get_redoc_html.__kwdefaults__["redoc_favicon_url"] = "/static/redoc/favicon.png"

最后不要忘记挂载静态路由:

app.mount("/static", StaticFiles(directory="static"), name="static")

你可能感兴趣的:(python,fastapi,ui,Swagger,Fastapi)