如何利用FastAPI的命名空间和标签来组织路由?
时间: 2024-09-16 14:00:41 浏览: 35
在FastAPI中,你可以利用命名空间和标签(tags)来组织和分类路由,提高代码的清晰度和可读性。以下是如何使用它们的步骤:
**命名空间(Namespace)**:
命名空间是FastAPI内置的功能,它可以让你创建一个自定义的目录结构来组织你的路由。通常,在`app.py`或`main.py`中,你会创建一个`APIs`或`Routes`这样的模块,然后将你的子模块(如`users.py`, `auth.py`)导入并放置在这个大模块下。
```python
# main.py 或 app.py
from .apis.users import user_routes
from .apis.auth import auth_routes
# 然后在启动时:
app.include_router(user_routes, prefix="/users")
app.include_router(auth_routes, prefix="/auth")
```
**标签(Tags)**:
在定义路由时,你可以给每个路由添加一个或多个`tags`,通过`tags`属性指定。这样,你可以轻松地将相关路由归类到一起,同时提供文档和API参考时更方便地展示这些路由的分类。
```python
# 在某个子模块中:
from fastapi import APIRouter, Depends
router = APIRouter(tags=["users"])
@router.get("/{user_id}")
async def read_user(user_id: int, current_user: User = Depends(get_current_user)):
# 路由逻辑...
```
在`docs.py`或使用`fastapi-docs`插件生成文档时,你可以按照标签过滤和查看相关的路由列表。
**组合使用**:
你可以结合命名空间和标签,例如在`users.py`中定义`user`模块,然后为每个路由添加标签`"user"`。
```python
# users.py
from fastapi import APIRouter
user_router = APIRouter()
user_router.get("/{user_id}", tags=["user"], name="read_user") # 添加了tag "user" 和name 属性
```
这样,当你访问API文档时,可以看到所有标记为`"user"`的路由,并且可以根据`prefix`(前缀)找到具体的模块。
阅读全文