『FastAPI』路由分发
点赞 + 关注 + 收藏 = 学会了
欢迎订阅《FastAPI中文教程》。
本文简介
上一讲介绍了 FastAPI
“请求与响应”的基础用法。但当你的应用逐渐变大时,把所有的路由都写在同一个文件中会使代码变得混乱、难以维护。通过路由分发,你可以将应用的不同功能模块拆分成多个文件或模块,方便管理和组织。
比如,一个电商平台有用户模块,有订单模块,有商品模块等等,将各个模块分开开发维护肯定比写在同一个文件中更有优势。
在 FastAPI
中,借助 APIRouter
可以实现路由分发功能。其本质是向路由中添加子路由。
APIRouter 基础用法
要实现路由分发需要以下2步:
- 使用
APIRouter
创建子路由。 - 在主应用通过
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
以上就是本文的全部内容,如果本文对你有帮助的话可以转发给你的程序员朋友~
点赞 + 关注 + 收藏 = 学会了