『FastAPI』路由分发

点赞 + 关注 + 收藏 = 学会了

欢迎订阅《FastAPI中文教程》

本文简介

上一讲介绍了 FastAPI “请求与响应”的基础用法。但当你的应用逐渐变大时,把所有的路由都写在同一个文件中会使代码变得混乱、难以维护。通过路由分发,你可以将应用的不同功能模块拆分成多个文件或模块,方便管理和组织。

比如,一个电商平台有用户模块,有订单模块,有商品模块等等,将各个模块分开开发维护肯定比写在同一个文件中更有优势。

FastAPI 中,借助 APIRouter 可以实现路由分发功能。其本质是向路由中添加子路由。

APIRouter 基础用法

要实现路由分发需要以下2步:

  1. 使用 APIRouter 创建子路由。
  2. 在主应用通过 include_router()引入子路由。

举个例子。

我创建了一个项目,目录结构如下所示:

├── main.py
├── routers/
│   ├── user/
│   │   └── routes.py
│   ├── orders/
│   │   └── routes.py

main.py 是主应用。

routers 是路由的总目录,各个模块都放在这里管理。

user/ 是用户模块,里面放了一个 routes.py 文件。

orders 是订单模块,里面同样放了一个 routes.py 文件。

你不一定要百分百按照上面这个结构创建项目,我这么做主要是想比较明确的区分开各个模块,让各位工友学习时不会那么乱。

user/routes.py 里写以下代码:

# user/routes.py

from fastapi import APIRouter

# 创建一个 APIRouter 实例
router = APIRouter()

@router.get("/userInfo")
def getUserInfo():
  return {
    "msg": "用户信息"
  }

需要注意,我们之前创建路由都是先 app = FastAPI() ,然后用 @app.get() 等方法创建路由。但要路由分发时(子路由)用的是 router = APIRouter() ,然后再 @router.get() 来创建子路由。

上面的代码创建了一个 userInfo 接口,当客户端访问这个接口时就会返回 {"msg": "用户信息"} 给到客户的。

接着继续写订单模块的功能。

# orders/routes.py

from fastapi import APIRouter

router = APIRouter()

@router.get("/list")
def getOrdersList():
  return {
    "msg": "订单列表"
  }

@router.get("/{orderId}")
def getOrderDetails(orderId):
  return {
    "msg": f"这是订单详情,订单id为:{orderId}"
  }

在订单模块创建了2个接口,一个是 /list 用来查询订单列表的。另一个是 /{orderId} ,需要传入订单id,查询这个订单的详情。

最后,在 main.py 中引入这两个子路由。

# main.py

from fastapi import FastAPI
from routers.user import routes as user_routes
from routers.orders import routes as orders_routes

app = FastAPI()

# 分别引入 user 和 items 路由
app.include_router(user_routes.router, prefix="/user", tags=["用户相关接口"])
app.include_router(orders_routes.router, prefix="/orders", tags=["订单相关接口"])

if __name__ == "__main__":
    import uvicorn
    uvicorn.run('main:app', host="127.0.0.1", port=8000, reload=True, workers=1)

使用 app.include_router方法可以把 APIRouter 对象添加到 app 路由列表里,第一个参数需要传入子路由, prefix 可以给这个模块的路由添加一个前缀,tags 可以标明这是什么模块,主要让生成的文档有个提示。

运行项目

python main.py

此时访问 127.0.0.1:8000/docs 看看文档。

可以清楚的看到刚刚创建的2个模块。仔细看,用户模块有个前缀 /user,订单模块创建的2个接口都有一个 orders 前缀。

此时如果想访问订单列表接口,需要访问这个地址:http://127.0.0.1:8000/orders/list


以上就是本文的全部内容,如果本文对你有帮助的话可以转发给你的程序员朋友~

点赞 + 关注 + 收藏 = 学会了

posted @ 2024-11-14 09:00  德育处主任  阅读(0)  评论(0编辑  收藏  举报