掘金 后端 ( ) • 2024-04-01 15:57

theme: smartblue

为何要用路由?

如果你正在构建一个应用程序或一个 Web API,你很少会把所有东西都放在一个文件中。前几篇文章写的例子所有的东西都在一个文件里,如果需求过多,则显得杂乱无章,这个时候就可以使用路由(APIRouter)改变这一现状。

利用 APIRouter 实现路由

APIRouter 属于 FastAPI 包,为多个路由创建路径操作。APIRouter 鼓励应用程序路由和逻辑的模块化和组织化。

APIRouter 类从 fastapi 包中导入,并创建一个实例。路由方法被创建并从创建的实例中分发,我这里以用户的基本功能为例(add_router.py),如下:

from fastapi import APIRouter

# create router
addRouter = APIRouter(
    prefix='/add',
    tags = ['添加路由']
)


@addRouter.get('/users')
def add_users():
    return { "message": "这是添加用户接口"}

@addRouter.get('/content')
def add_content():
    return { "message": "这是内容接口"}

上面的代码将创建一个路由器实例,它可以带有一些参数,比如下面两个的含义:

  • prefix:在特定页面中 fastapi 提供的每个装饰器中添加前缀
  • tags:这将帮助我们找到属于哪个类别的功能,同时这会显示在FastAPI自动生成的文档中(类似于相关文章的主题标签

将APIRouter 添加到FastAPI实例

APIRouter 类的工作方式与 FastAPI 类的工作方式相同。然而, uvicorn 不能使用 APIRouter 实例为应用程序服务,这与FastAPI 不同。使用 APIRouter 类定义的路由需要被添加到 FastAPI 实例中,以实现它们的功能。

为了使刚刚定义的路由可见,我们将使用 include_router() 方法把 add_router.py 文件的addRouter操作处理程序到主 FastAPI 实例中(main.py),如下:

from fastapi import FastAPI
from add_router import addRouter
import uvicorn
app = FastAPI()

app.include_router(addRouter)
if __name__ == "__main__":
    uvicorn.run(app="main:app", host="0.0.0.0", port=5000, log_level="info", reload=True)

include_router() 方法负责在主程序的实例中加入用 APIRouter 类定义的路由添加到主应用程序的实例中,以使路由变得可见。
from add_router import addRouter 其中add_router是需要引入路由的文件名,如果add_router.py在某个文件夹下(apis/add_router.py),则add_router则要变成apis/add_router。

addRouter 为要引入的路由名,相当于函数名(addRouter = APIRouter()),如果APIRouter()赋值给router 则表达式为 router = APIRouter()。那么将APIRouter添加到fastapi实例则变成 from add_router import router,include_router(router)

测试路由

image.png

image.png