FastAPI-Docs空白详解

FastAPI-Docs是一个用于自动生成API文档的工具,它可以高效地生成交互式文档,同时支持多种格式,包括OpenAPI(以前称为Swagger)和ReDoc。在FastAPI中使用FastAPI-Docs非常简单,只需在定义API路由时启用Docs即可。在这篇文章中,我们将从多个方面对FastAPI-Docs进行详细的阐述。

一、使用FastAPI-Docs快速生成API文档

要使用FastAPI-Docs快速生成API文档,我们只需在定义API路由时启用Docs。以下是一个示例代码:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
    return {"message": "Hello World"}

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)

在这个示例中,我们只定义了一个根路由,它将返回一个JSON响应,并在应用程序启动时使用Uvicorn启动。

要启用FastAPI-Docs,只需要在路由定义中添加一个参数“docs_url”并设置为’/docs’。这将启用一个自动生成的文档站点,网址为’http://localhost:8000/docs’。以下是修改后的代码:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
    return {"message": "Hello World"}

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000, docs_url="/docs")

现在访问’http://localhost:8000/docs’就可以看到自动生成的API文档了。在FastAPI中使用FastAPI-Docs非常简单,只需启用路由定义中的“docs_url”参数即可。接下来,我们将进一步了解FastAPI-Docs的各个方面。

二、快速生成OpenAPI文档

在 FastAPI中使用FastAPI-Docs,你可以快速生成 OpenAPI 文档,以便于与其他开发者共享。以下是一个示例代码,演示如何使用FastAPI-Docs生成OpenAPI文档:

from fastapi import FastAPI
from fastapi.openapi.utils import get_openapi

app = FastAPI()

@app.get("/")
async def root():
    return {"message": "Hello World"}

def custom_openapi():
    if app.openapi_schema:
        return app.openapi_schema
    openapi_schema = get_openapi(
        title="Custom title",
        version="2.5.0",
        description="This is a very custom OpenAPI schema",
        routes=app.routes,
    )
    app.openapi_schema = openapi_schema
    return app.openapi_schema

app.openapi = custom_openapi

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000, docs_url="/docs")

在这个示例中,我们定义了一个名为 custom_openapi 的函数。该函数作为 app.openapi 的值设置,这是一个包含 OpenAPI Schema 的字典。在此示例中,我们设置了一个自定义标题、自定义版本和自定义说明,以及将 app.routes 作为参数传递给 FastAPI-Docs。如果你希望使用 FastAPI-Docs 更改你的 API 的文档,那么这非常有用。

三、文档页面的定制

FastAPI-Docs不仅支持一键生成文档,还支持自定义文档页面的外观和行为。以下是示例代码,演示如何自定义文档页面:

from fastapi import FastAPI, Response
from fastapi.openapi.docs import get_redoc_html, get_swagger_ui_html
from fastapi.responses import HTMLResponse

app = FastAPI()

@app.route("/redoc")
async def redoc(request: Request):
    return get_redoc_html(
        openapi_url="/openapi.json",
        title="Custom Redoc",
        redoc_js_url="/static/redoc.standalone.js",
        redoc_favicon_url="/static/favicon.png",
    )

@app.route("/docs", methods=["GET"])
async def get_docs(request: Request):
    return get_swagger_ui_html(
        openapi_url="/openapi.json",
        title="Custom Swagger UI",
        swagger_js_url="/static/swagger-ui-bundle.js",
        swagger_css_url="/static/swagger-ui.css",
        swagger_favicon_url="/static/favicon.png",
    )

@app.route("/openapi.json")
async def get_open_api_endpoint(request: Request):
    return JSONResponse(app.openapi())

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000, docs_url="/docs")

在这个示例中,我们定义三个路由,’redoc’,’docs’和’openapi.json’。在’get_docs’路由中,我们返回响应,其中包含自定义的Swagger UI。在’redoc’路由中,我们返回响应,其中包含自定义的Redoc实例。在’get_open_api_endpoint’路由中,我们返回包含OpenAPI Schema的响应。上面这个示例代码的网址为’http://localhost:8000/redoc’和’http://localhost:8000/docs’。

四、在文档中附加模型类

在 FastAPI-Docs 中,你可以将模型类附加到文档中。以下是一个示例代码,演示如何在文档中附加模型类:

from fastapi import FastAPI
from pydantic import BaseModel

class Item(BaseModel):
    name: str
    price: float
    is_offer: bool = None

app = FastAPI()

@app.post("/items/")
async def create_item(item: Item):
    return item

@app.get("/items/{item_id}")
async def read_item(item_id: int):
    return {"item_id": item_id}

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000, docs_url="/docs", schema_url="/schema")

在这个示例中,我们定义了一个名为 Item 的模型类,并将其作为参数传递给 API 路由。FastAPI-Docs将自动生成与 Item 模型类相关的 JSON Schema。还可以通过在启动应用程序时设置 “schema_url” 来生成该模式。这将返回一个包含 JSON Schema 的响应,网址为’http://localhost:8000/schema’。

五、使用FastAPI-Docs自定义认证和授权页面

FastAPI-Docs 还支持自定义认证和授权页面。以下是一个示例代码,演示如何自定义认证和授权页面:

from fastapi import FastAPI
from fastapi.openapi.docs import (get_swagger_ui_html, get_redoc_html)
from fastapi.openapi.utils import get_openapi
from fastapi.responses import HTMLResponse, JSONResponse

app = FastAPI()

@app.get("")
async def read_root():
    return {"Hello": "World"}

@app.post("/token")
async def login():
    return {"access_token": "johndoe_token"}

# Documentation URLs
@app.get("/docs", response_class=HTMLResponse)
async def get_documentation():
    return get_swagger_ui_html(
        openapi_url="/openapi.json",
        title="docs"
    )

@app.get("/redoc", response_class=HTMLResponse)
async def get_documentation():
    return get_redoc_html(
        openapi_url="/openapi.json",
        title="redoc"
    )

@app.get("/openapi.json", response_class=JSONResponse)
async def get_openapi():
    return get_openapi(
        title="Custom Title",
        version="2.5.0",
        description="This is a custom OpenAPI schema",
        routes=app.routes,
    )

if __name__ == '__main__':
    import uvicorn
    uvicorn.run(app, port=8000, host="0.0.0.0", debug=True, use_colors=True)

在这个示例中,我们定义了两个认证和授权路由 (“/” 和 “/token”),以及三个文档路由 (“/docs”、”/redoc” 和 “/openapi.json”)。在”/token”挂载的路由中验证用户,若验证成功,我们返回一个授权令牌。API 文档将显示一个“Authorize”按钮,就像默认情况下一样,但是我们在“Authorize”框中输入的“Bearer ”后面输入上面返回的授权令牌。使用 FastAPI-Docs,我们可以轻松地自定义认证和授权页面。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/227812.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-09 21:21
下一篇 2024-12-09 21:21

相关推荐

  • 打包后页面空白的解决方案

    当我们在调试阶段时,我们的app可能看起来完美无缺,但当我们进行打包时,在运行app时,我们可能会遇到白屏或空白的问题。在这篇文章中,我们将探讨如何解决这种问题。 一、检查文件路径…

    编程 2025-04-29
  • Gino FastAPI实现高效低耗ORM

    本文将从以下多个方面详细阐述Gino FastAPI的优点与使用,展现其实现高效低耗ORM的能力。 一、快速入门 首先,我们需要在项目中安装Gino FastAPI: pip in…

    编程 2025-04-27
  • Python输出空白缺少类

    Python是一种高级编程语言,它被广泛应用于Web应用程序开发、数据库管理、网络自动化等方面,在各行各业中占据着重要的地位。但是,有时候在Python编程中,我们会遇到输出空白缺…

    编程 2025-04-27
  • Python删除字符串开头和末尾的空白

    本文将对使用Python删除字符串开头和末尾的空白进行详细的阐述。 一、strip()函数简介 strip()函数是Python字符串中常用的函数之一,它可以用于删除字符串开头和末…

    编程 2025-04-27
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25
  • git config user.name的详解

    一、为什么要使用git config user.name? git是一个非常流行的分布式版本控制系统,很多程序员都会用到它。在使用git commit提交代码时,需要记录commi…

    编程 2025-04-25
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 2025-04-25

发表回复

登录后才能评论