This commit is contained in:
杨煜 2025-09-27 21:51:58 +08:00
parent 227bade97c
commit 04cb2cbbf7
6 changed files with 203 additions and 14 deletions

2
.gitignore vendored
View File

@ -96,7 +96,7 @@ celerybeat.pid
*.sage.py *.sage.py
# Environments # Environments
.env .env.dev
.env.local .env.local
.env.dev .env.dev
.env.test .env.test

View File

@ -8,14 +8,15 @@
```bash ```bash
# 安装依赖 # 安装依赖
pip install -r requirements.txt 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 python main.py
# 2. 指定环境运行(推荐) # 2. 指定环境运行(推荐)
ENVIRONMENT=development python main.py # 使用 .env.dev 配置 ENVIRONMENT=development python main.py # 使用 .env.dev.dev 配置
ENVIRONMENT=testing python main.py # 使用 .env.test 配置 ENVIRONMENT=testing python main.py # 使用 .env.dev.test 配置
ENVIRONMENT=production python main.py # 使用 .env.prod 配置 ENVIRONMENT=production python main.py # 使用 .env.dev.prod 配置
# 3. Windows 系统设置环境变量 # 3. Windows 系统设置环境变量
set ENVIRONMENT=development && python main.py set ENVIRONMENT=development && python main.py
@ -44,7 +45,7 @@ python start.py --env dev --reload # 开发环境+强制热重载
### 配置管理 ### 配置管理
```bash ```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}')" python -c "from app.core.config import settings; print(f'Environment: {settings.ENVIRONMENT}'); print(f'Debug: {settings.DEBUG}')"

View File

@ -1,6 +1,6 @@
""" """
应用配置管理 应用配置管理
支持从环境变量和 .env 文件加载配置 支持从环境变量和 .env.dev 文件加载配置
""" """
from typing import List, Optional from typing import List, Optional
from pydantic import Field, validator from pydantic import Field, validator
@ -113,7 +113,7 @@ class Settings(BaseSettings):
return self.ENVIRONMENT == "testing" return self.ENVIRONMENT == "testing"
class Config: class Config:
env_file = ".env" env_file = ".env.dev"
env_file_encoding = "utf-8" env_file_encoding = "utf-8"
case_sensitive = True case_sensitive = True
@ -124,13 +124,13 @@ def get_settings() -> Settings:
import os import os
env = os.getenv("ENVIRONMENT", "development") env = os.getenv("ENVIRONMENT", "development")
env_files = [".env"] env_files = [".env.dev"]
if env == "development": if env == "development":
env_files.append(".env.dev") env_files.append(".env.dev.dev")
elif env == "testing": elif env == "testing":
env_files.append(".env.test") env_files.append(".env.dev.test")
elif env == "production": elif env == "production":
env_files.append(".env.prod") env_files.append(".env.dev.prod")
# 尝试加载对应的环境配置文件 # 尝试加载对应的环境配置文件
for env_file in reversed(env_files): for env_file in reversed(env_files):

View File

@ -1,6 +1,6 @@
fastapi==0.109.0 fastapi==0.109.0
uvicorn[standard]==0.27.0 uvicorn[standard]==0.27.0
pydantic==2.5.3 pydantic==2.8.0
pydantic-settings==2.1.0 pydantic-settings==2.1.0
python-multipart==0.0.6 python-multipart==0.0.6
email-validator==2.1.0 email-validator==2.1.0

View File

@ -51,7 +51,7 @@ def main():
if args.env: if args.env:
env_map = {"dev": "development", "test": "testing", "prod": "production"} env_map = {"dev": "development", "test": "testing", "prod": "production"}
os.environ["ENVIRONMENT"] = env_map[args.env] 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: if args.host:

188
项目文档.md Normal file
View File

@ -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流程
- 容器化部署支持