diff --git a/.gitignore b/.gitignore index d5313e4..e4209b8 100644 --- a/.gitignore +++ b/.gitignore @@ -96,7 +96,7 @@ celerybeat.pid *.sage.py # Environments -.env +.env.dev .env.local .env.dev .env.test diff --git a/CLAUDE.md b/CLAUDE.md index ff14ba5..6745cfd 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -8,14 +8,15 @@ ```bash # 安装依赖 pip install -r requirements.txt +pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ -# 1. 直接运行(使用 .env 或默认配置) +# 1. 直接运行(使用 .env.dev 或默认配置) python main.py # 2. 指定环境运行(推荐) -ENVIRONMENT=development python main.py # 使用 .env.dev 配置 -ENVIRONMENT=testing python main.py # 使用 .env.test 配置 -ENVIRONMENT=production python main.py # 使用 .env.prod 配置 +ENVIRONMENT=development python main.py # 使用 .env.dev.dev 配置 +ENVIRONMENT=testing python main.py # 使用 .env.dev.test 配置 +ENVIRONMENT=production python main.py # 使用 .env.dev.prod 配置 # 3. Windows 系统设置环境变量 set ENVIRONMENT=development && python main.py @@ -44,7 +45,7 @@ python start.py --env dev --reload # 开发环境+强制热重载 ### 配置管理 ```bash # 复制环境配置模板 -cp .env.example .env +cp .env.dev.example .env.dev # 查看当前配置 python -c "from app.core.config import settings; print(f'Environment: {settings.ENVIRONMENT}'); print(f'Debug: {settings.DEBUG}')" diff --git a/app/core/config.py b/app/core/config.py index bbb462e..37ffd45 100644 --- a/app/core/config.py +++ b/app/core/config.py @@ -1,6 +1,6 @@ """ 应用配置管理 -支持从环境变量和 .env 文件加载配置 +支持从环境变量和 .env.dev 文件加载配置 """ from typing import List, Optional from pydantic import Field, validator @@ -113,7 +113,7 @@ class Settings(BaseSettings): return self.ENVIRONMENT == "testing" class Config: - env_file = ".env" + env_file = ".env.dev" env_file_encoding = "utf-8" case_sensitive = True @@ -124,13 +124,13 @@ def get_settings() -> Settings: import os env = os.getenv("ENVIRONMENT", "development") - env_files = [".env"] + env_files = [".env.dev"] if env == "development": - env_files.append(".env.dev") + env_files.append(".env.dev.dev") elif env == "testing": - env_files.append(".env.test") + env_files.append(".env.dev.test") elif env == "production": - env_files.append(".env.prod") + env_files.append(".env.dev.prod") # 尝试加载对应的环境配置文件 for env_file in reversed(env_files): diff --git a/requirements.txt b/requirements.txt index b3265a0..d51f235 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,6 @@ fastapi==0.109.0 uvicorn[standard]==0.27.0 -pydantic==2.5.3 +pydantic==2.8.0 pydantic-settings==2.1.0 python-multipart==0.0.6 email-validator==2.1.0 \ No newline at end of file diff --git a/start.py b/start.py index 76a4406..e87d13c 100644 --- a/start.py +++ b/start.py @@ -51,7 +51,7 @@ def main(): if args.env: env_map = {"dev": "development", "test": "testing", "prod": "production"} os.environ["ENVIRONMENT"] = env_map[args.env] - print(f"[INFO] 启动环境: {env_map[args.env]} (配置文件: .env.{args.env})") + print(f"[INFO] 启动环境: {env_map[args.env]} (配置文件: .env.dev.{args.env})") # 临时覆盖配置 if args.host: diff --git a/项目文档.md b/项目文档.md new file mode 100644 index 0000000..2cd2ddb --- /dev/null +++ b/项目文档.md @@ -0,0 +1,188 @@ +# FastAPI Demo 项目文档 + +## 1. 项目概述 + +**项目名称**:FastAPI Demo +**版本**:1.0.0 +**描述**:一个简单的FastAPI学习项目 + +本项目是一个基于FastAPI框架开发的RESTful API示例应用,实现了用户管理和产品管理的基本功能。项目采用了模块化的架构设计,遵循了最佳实践,适合作为FastAPI学习和开发的参考。 + +## 2. 技术栈 + +- **后端框架**:FastAPI +- **编程语言**:Python +- **API文档**:Swagger UI (通过FastAPI自动生成) +- **数据存储**:当前使用内存模拟数据库,可扩展为真实数据库 + +## 3. 项目结构 + +``` +fastapi-demo-git/ +├── app/ # 应用主目录 +│ ├── api/ # API路由定义 +│ │ └── v1/ # API v1版本 +│ │ ├── endpoints/ # API端点实现 +│ │ └── router.py # 路由聚合 +│ ├── core/ # 核心配置和应用创建 +│ │ ├── application.py # 应用工厂 +│ │ └── config.py # 配置管理 +│ ├── models/ # 数据模型 +│ │ ├── product.py # 产品模型 +│ │ └── user.py # 用户模型 +│ ├── schemas/ # 数据验证和序列化 +│ │ ├── product.py # 产品Schema +│ │ └── user.py # 用户Schema +│ └── services/ # 业务逻辑服务 +│ ├── product_service.py # 产品服务 +│ └── user_service.py # 用户服务 +├── .env.example # 环境变量示例 +├── main.py # 应用入口 +└── requirements.txt # 项目依赖 +``` + +## 4. 架构设计 + +本项目采用了分层架构设计,主要包括以下几层: + +1. **API层**:处理HTTP请求和响应,定义API路由和端点 +2. **服务层**:实现业务逻辑,处理数据操作 +3. **模型层**:定义数据模型和数据库交互 +4. **Schema层**:处理数据验证、序列化和反序列化 + +### 4.1 应用初始化流程 + +1. 通过`main.py`中的`create_application()`函数创建FastAPI应用实例 +2. 配置中间件(如CORS) +3. 注册API路由 +4. 注册事件处理器(启动和关闭事件) + +## 5. 配置管理 + +项目使用Pydantic的`BaseSettings`进行配置管理,支持从环境变量和`.env`文件加载配置。主要配置项包括: + +- 应用基础配置(项目名称、版本等) +- 服务器配置(主机、端口等) +- API配置 +- 数据库配置 +- CORS配置 +- JWT认证配置 +- 邮件配置 +- 文件上传配置 +- 第三方API配置 +- 监控配置 +- 限流配置 + +## 6. API接口文档 + +### 6.1 用户管理API + +#### 获取所有用户 + +- **URL**: `/api/v1/users/` +- **方法**: GET +- **描述**: 获取所有用户列表 +- **响应**: 用户对象数组 + +#### 获取单个用户 + +- **URL**: `/api/v1/users/{user_id}` +- **方法**: GET +- **描述**: 根据ID获取单个用户 +- **参数**: + - `user_id`: 用户ID (路径参数) +- **响应**: 用户对象 +- **错误**: 404 - 用户不存在 + +### 6.2 产品管理API + +#### 获取所有产品 + +- **URL**: `/api/v1/products/` +- **方法**: GET +- **描述**: 获取所有商品列表 +- **响应**: 产品对象数组 + +#### 获取单个产品 + +- **URL**: `/api/v1/products/{product_id}` +- **方法**: GET +- **描述**: 根据ID获取单个商品 +- **参数**: + - `product_id`: 产品ID (路径参数) +- **响应**: 产品对象 +- **错误**: 404 - 产品不存在 + +## 7. 数据模型 + +### 7.1 用户模型 + +```python +class User: + id: int # 用户ID + username: str # 用户名 + email: str # 电子邮件 + full_name: Optional[str] # 全名(可选) + is_active: bool # 是否激活 + created_at: datetime # 创建时间 +``` + +### 7.2 产品模型 + +```python +class Product: + id: int # 产品ID + name: str # 产品名称 + description: Optional[str] # 产品描述(可选) + price: float # 价格 + stock: int # 库存数量 + is_available: bool # 是否可用 + created_at: datetime # 创建时间 +``` + +## 8. 启动和运行 + +### 8.1 安装依赖 + +```bash +pip install -r requirements.txt +``` + +### 8.2 配置环境变量 + +创建`.env`文件,参考`.env.example`进行配置。 + +### 8.3 启动应用 + +```bash +python main.py +``` + +默认情况下,应用将在 http://127.0.0.1:8000 上运行。 + +### 8.4 访问API文档 + +- Swagger UI: http://127.0.0.1:8000/docs +- ReDoc: http://127.0.0.1:8000/redoc + +## 9. 开发指南 + +### 9.1 添加新的API端点 + +1. 在`app/api/v1/endpoints/`目录下创建新的端点文件 +2. 在`app/api/v1/router.py`中注册新的路由 + +### 9.2 添加新的数据模型 + +1. 在`app/models/`目录下创建新的模型文件 +2. 在`app/schemas/`目录下创建对应的Schema文件 +3. 在`app/services/`目录下创建对应的服务文件 + +## 10. 未来扩展 + +- 添加数据库集成(如SQLAlchemy) +- 实现用户认证和授权 +- 添加更多的API端点和功能 +- 实现单元测试和集成测试 +- 添加CI/CD流程 +- 容器化部署支持 \ No newline at end of file