fastapi mvc
时间: 2025-07-08 19:44:42 浏览: 11
在 FastAPI 中实现 MVC(Model-View-Controller)架构模式,可以通过合理组织项目结构和分离关注点来模拟传统 MVC 的三层架构。尽管 FastAPI 本身是一个轻量级的 API 框架,并不直接提供完整的 MVC 支持,但通过结合 Python 的模块化设计和 FastAPI 的路由机制,可以有效地构建出符合 MVC 思想的应用程序。
### MVC 架构概述
MVC 架构将应用程序分为三个核心组件:
- **Model**:负责数据逻辑,通常与数据库交互。
- **View**:负责展示数据给用户。
- **Controller**:处理用户输入,协调 Model 和 View。
虽然 FastAPI 主要用于构建 RESTful API,其默认设计更偏向于 MVVM 或前后端分离的架构[^3],但仍可通过以下方式模拟 MVC 模式。
### 项目结构示例
```bash
my_fastapi_app/
│
├── app/
│ ├── __init__.py
│ ├── main.py
│ ├── controllers/
│ │ ├── __init__.py
│ │ └── user_controller.py
│ ├── models/
│ │ ├── __init__.py
│ │ └── user_model.py
│ └── views/
│ ├── __init__.py
│ └── user_view.py
│
└── requirements.txt
```
### 实现步骤
#### 1. 定义 Model
`models/user_model.py`
```python
from pydantic import BaseModel
class User(BaseModel):
id: int
name: str
email: str
```
#### 2. 定义 View
`views/user_view.py`
```python
def render_user(user: dict) -> dict:
return {
"id": user["id"],
"name": user["name"],
"email": user["email"]
}
```
#### 3. 定义 Controller
`controllers/user_controller.py`
```python
from fastapi import APIRouter
from views.user_view import render_user
from models.user_model import User
router = APIRouter()
@router.get("/user/{user_id}")
def get_user(user_id: int):
# 模拟从数据库获取用户信息
fake_user_db = {
"id": user_id,
"name": "John Doe",
"email": "[email protected]"
}
return render_user(fake_user_db)
```
#### 4. 启动应用并注册路由
`main.py`
```python
from fastapi import FastAPI
from controllers.user_controller import router as user_router
app = FastAPI()
app.include_router(user_router, prefix="/api", tags=["users"])
@app.get("/")
def read_root():
return {"message": "Welcome to FastAPI MVC"}
```
### 运行应用
确保安装了 FastAPI 和 Uvicorn:
```bash
pip install fastapi uvicorn
```
启动服务:
```bash
uvicorn app.main:app --reload
```
访问 `http://localhost:8000/api/user/1` 查看返回的用户信息。
### 总结
通过上述结构,FastAPI 应用实现了类似 MVC 的架构模式,其中:
- **Model** 负责定义数据结构;
- **View** 负责格式化输出;
- **Controller** 处理请求并调用相应的模型和视图。
这种分层设计有助于提高代码的可维护性和扩展性,尤其适用于中大型项目开发。
---
阅读全文
相关推荐



















