fastapi 注册路由原理,将不同模块的路由分成不同程序
时间: 2024-09-16 09:00:40 浏览: 10
在FastAPI中,注册路由是通过装饰器`@app.route`或`app.include_router`来实现的,允许将不同的业务功能划分为独立的模块,每个模块负责一部分路由。以下是基本原理和分模块注册路由的步骤:
**原理**:
- **装饰器`@app.route`**:这是最直接的方式,当你在一个视图函数上使用这个装饰器,它会告诉FastAPI该函数处理特定的URL路径。例如:
```python
@app.get("/users/{user_id}")
def get_user(user_id: int):
# ... 用户获取逻辑
```
- **`app.include_router`**:如果你有多个相关的路由和视图,可以创建一个单独的Router实例,并将其包含到主应用程序中。这有助于组织和复用代码,比如:
```python
router = APIRouter()
router.get("/users/{user_id}", ..., view_func=get_user)
app.include_router(router, prefix="/api/v1")
```
这里的`prefix`参数用于添加前缀,避免路由冲突。
**分模块注册路由**:
1. **创建子模块**:为每个业务模块创建一个单独的文件(如`auth.py`, `users.py`等),并在其中定义相关的路由和视图函数。
2. **定义路由**:在子模块中定义路由,使用`@router.get`、`@router.post`等装饰器。
```python
# auth.py
from fastapi import APIRouter
auth_router = APIRouter()
@auth_router.post("/login")
async def login(user_data: LoginData):
# 登录逻辑...
# users.py
from fastapi import APIRouter
users_router = APIRouter()
@users_router.get("/{user_id}")
async def get_user(user_id: int):
# 获取用户逻辑...
```
3. **引入子模块到主应用**:在`main.py`或`app.py`中,使用`include_router`将子模块的路由添加到主应用中。
```python
from .auth import auth_router
from .users import users_router
app.include_router(auth_router, tags=["Authentication"])
app.include_router(users_router, prefix="/v1", tags=["Users"])
```
这样,不同模块的路由就分别集中在各自的子模块中,提高了代码的组织性和可维护性。