全栈FastAPI+PostgreSQL模板:现代Web应用开发的完美起点
Full Stack FastAPI PostgreSQL 模板是一个功能完备的现代 Web 应用程序模板,专为快速启动全栈项目而设计。该项目采用前后端分离架构,后端基于 FastAPI 框架,前端使用 React + TypeScript,数据库采用 PostgreSQL,并通过 Docker Compose 实现容器化部署。整个项目集成了业界领先的技术栈,提供了开箱即用的开发环境,包含完整的安全认证体系、自动化测试套件和 CI/CD 流水线,让开发者能够专注于业务逻辑的实现。
项目概述与技术栈介绍
Full Stack FastAPI PostgreSQL 模板是一个功能完备的现代 Web 应用程序模板,专为快速启动全栈项目而设计。该项目集成了业界领先的技术栈,提供了一个开箱即用的开发环境,让开发者能够专注于业务逻辑的实现,而无需花费大量时间在基础设施配置上。
项目架构概览
该模板采用前后端分离的架构设计,后端基于 FastAPI 框架,前端使用 React + TypeScript,数据库采用 PostgreSQL,并通过 Docker Compose 实现容器化部署。整个项目的架构设计体现了现代 Web 开发的最佳实践。
flowchart TD
A[前端 React + TypeScript] -->|HTTP 请求| B[FastAPI 后端]
B -->|数据库操作| C[PostgreSQL]
B -->|认证授权| D[JWT Token]
C -->|数据持久化| E[SQLModel ORM]
F[Docker Compose] -->|容器编排| G[整体应用部署]
H[GitHub Actions] -->|CI/CD 流水线| I[自动化测试与部署]
核心技术栈详解
后端技术栈
FastAPI 框架 - 作为后端的核心框架,FastAPI 提供了极高的性能表现和优秀的开发体验。其基于 Python 3.6+ 的类型提示特性,使得代码更加健壮和易于维护。
# 示例:FastAPI 路由定义
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
SQLModel ORM - 结合了 SQLAlchemy 和 Pydantic 的优势,提供了类型安全的数据库操作体验。SQLModel 允许开发者使用 Python 类来定义数据库模型,同时支持数据验证和序列化。
# 示例:SQLModel 数据模型定义
class User(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
email: str = Field(index=True, unique=True)
hashed_password: str
is_active: bool = Field(default=True)
Pydantic 数据验证 - 用于请求和响应数据的验证与序列化,确保数据的完整性和一致性。
| 特性 | 描述 | 优势 |
|---|---|---|
| 类型提示 | 基于 Python 类型系统 | 编译时错误检测 |
| 数据验证 | 自动验证输入数据 | 减少运行时错误 |
| 序列化 | 自动转换为 JSON | 简化 API 开发 |
前端技术栈
React + TypeScript - 前端采用现代化的 React 框架,结合 TypeScript 提供类型安全的开发体验。
// 示例:React 组件定义
interface UserProps {
name: string;
email: string;
}
const UserComponent: React.FC<UserProps> = ({ name, email }) => {
return (
<div>
<h2>{name}</h2>
<p>{email}</p>
</div>
);
};
Chakra UI 组件库 - 提供了一套美观且功能丰富的 UI 组件,支持暗黑模式和响应式设计。
Vite 构建工具 - 替代传统的 Webpack,提供了更快的开发服务器启动速度和热重载体验。
数据库与存储
PostgreSQL - 作为关系型数据库,提供了强大的数据存储和查询能力,支持复杂的事务处理和高级查询功能。
-- 示例:PostgreSQL 表结构
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
email VARCHAR(255) UNIQUE NOT NULL,
hashed_password VARCHAR(255) NOT NULL,
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
开发与部署工具
Docker Compose - 提供了一致的开发和生产环境,简化了依赖管理和部署流程。
# 示例:Docker Compose 配置
version: '3.8'
services:
backend:
build: ./backend
ports:
- "8000:8000"
environment:
- DATABASE_URL=postgresql://user:password@db:5432/app
frontend:
build: ./frontend
ports:
- "3000:3000"
GitHub Actions - 实现了完整的 CI/CD 流水线,包括自动化测试、代码质量检查和部署流程。
# 示例:GitHub Actions 工作流
name: Test
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
安全特性
项目内置了完善的安全机制,包括:
- JWT 认证 - 基于令牌的身份验证系统
- 密码哈希 - 使用 bcrypt 进行密码安全存储
- CORS 配置 - 跨域资源共享的安全配置
- 环境变量管理 - 敏感信息的 secure 存储
# 示例:JWT 令牌生成
def create_access_token(subject: Union[str, Any], expires_delta: timedelta = None) -> str:
if expires_delta:
expire = datetime.utcnow() + expires_delta
else:
expire = datetime.utcnow() + timedelta(minutes=15)
to_encode = {"exp": expire, "sub": str(subject)}
encoded_jwt = jwt.encode(to_encode, settings.SECRET_KEY, algorithm=ALGORITHM)
return encoded_jwt
测试体系
项目配备了完整的测试套件,包括:
- 单元测试 - 使用 pytest 进行后端逻辑测试
- 集成测试 - API 端到端测试
- E2E 测试 - 使用 Playwright 进行前端自动化测试
# 示例:pytest 测试用例
def test_create_user(client: TestClient):
response = client.post(
"/users/",
json={"email": "test@example.com", "password": "password123"},
)
assert response.status_code == 200
data = response.json()
assert data["email"] == "test@example.com"
assert "id" in data
技术栈优势分析
该技术栈的选择体现了现代 Web 开发的最佳实践:
- 性能优异 - FastAPI 基于 Starlette 和 Pydantic,提供了极快的请求处理速度
- 开发体验优秀 - 自动生成的 API 文档、类型提示、热重载等功能大幅提升开发效率
- 可扩展性强 - 模块化设计使得项目易于维护和扩展
- 生产就绪 - 包含完整的部署配置、监控和日志记录功能
- 社区活跃 - 所有使用的技术都有活跃的社区支持和持续的更新
通过这个技术栈,开发者可以快速构建出高性能、可维护、安全可靠的现代 Web 应用程序,无论是初创项目还是企业级应用都能得到良好的支持。
FastAPI与React的完美结合
在现代Web应用开发中,前后端分离架构已成为主流趋势。FastAPI与React的结合提供了一个强大而优雅的全栈解决方案,将Python后端的强大性能与React前端的灵活交互完美融合。这种组合不仅提升了开发效率,还确保了应用的可维护性和扩展性。
前后端通信架构
FastAPI与React的集成采用了清晰的RESTful API架构,通过自动生成的TypeScript客户端实现类型安全的通信。整个通信流程如下所示:
sequenceDiagram
participant React as React前端
participant Client as 生成客户端
participant FastAPI as FastAPI后端
participant DB as PostgreSQL数据库
React->>Client: 调用API方法
Client->>FastAPI: 发送HTTP请求
FastAPI->>DB: 执行数据库操作
DB-->>FastAPI: 返回数据
FastAPI-->>Client: 返回JSON响应
Client-->>React: 返回类型化数据
自动客户端生成机制
该项目最大的亮点之一是自动化的客户端生成系统。基于FastAPI的OpenAPI规范,前端能够自动生成完全类型化的TypeScript客户端代码:
# 自动生成客户端脚本
./scripts/generate-client.sh
这个过程会:
- 启动后端服务并获取OpenAPI JSON规范
- 使用
@hey-api/openapi-ts生成TypeScript客户端 - 创建完整的API服务类和类型定义
生成的客户端代码结构如下:
// 自动生成的API服务示例
export class ItemsService {
public static readItems(data: ItemsReadItemsData = {}):
CancelablePromise<ItemsReadItemsResponse> {
return __request(OpenAPI, {
method: "GET",
url: "/api/v1/items/",
query: { skip: data.skip, limit: data.limit }
})
}
}
认证与授权集成
JWT认证是前后端集成的核心环节。FastAPI提供安全的token生成和验证,React前端则负责token的管理和使用:
// 前端认证Hook实现
const useAuth = () => {
const login = async (data: AccessToken) => {
const response = await LoginService.loginAccessToken({ formData: data })
localStorage.setItem("access_token", response.access_token)
}
const logout = () => {
localStorage.removeItem("access_token")
navigate({ to: "/login" })
}
return { loginMutation, logout, user }
}
后端对应的认证端点:
# FastAPI认证路由
@router.post("/login/access-token")
def login_access_token(
session: SessionDep,
form_data: Annotated[OAuth2PasswordRequestForm, Depends()]
) -> Token:
user = authenticate_user(session, form_data.username, form_data.password)
access_token_expires = timedelta(minutes=settings.ACCESS_TOKEN_EXPIRE_MINUTES)
return Token(
access_token=create_access_token(
user.id, expires_delta=access_token_expires
),
token_type="bearer",
)
数据流管理
React前端使用TanStack Query进行高效的数据流管理,与FastAPI后端完美配合:
| 功能 | 实现方式 | 优势 |
|---|---|---|
| 数据获取 | useQuery + 自动生成客户端 | 类型安全,自动缓存 |
| 数据变更 | useMutation + 乐观更新 | 用户体验优化 |
| 错误处理 | 统一错误处理中间件 | 一致的错误反馈 |
// 使用TanStack Query进行数据操作
const { data: user } = useQuery<UserPublic | null, Error>({
queryKey: ["currentUser"],
queryFn: UsersService.readUserMe,
enabled: isLoggedIn(),
})
const mutation = useMutation({
mutationFn: (data: ItemCreate) =>
ItemsService.createItem({ requestBody: data }),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ["items"] })
}
})
CORS与安全配置
FastAPI提供了完整的安全配置,确保前后端跨域通信的安全:
# CORS配置
BACKEND_CORS_ORIGINS: Annotated[list[AnyUrl] | str, BeforeValidator(parse_cors)] = []
@computed_field
@property
def all_cors_origins(self) -> list[str]:
return [str(origin).rstrip("/") for origin in self.BACKEND_CORS_ORIGINS] + [
self.FRONTEND_HOST # 自动包含前端地址
]
开发体验优化
这种架构为开发者提供了极佳的开发体验:
- 热重载支持:Vite提供快速的前端热重载,FastAPI支持代码变更自动重启
- 类型安全:从后端到前端的完整类型链,减少运行时错误
- API文档:自动生成的Swagger UI和ReDoc文档
- 测试友好:完善的测试框架支持端到端测试
部署与生产优化
在生产环境中,这种架构提供了多种优化策略:
flowchart TD
A[React前端构建] --> B[静态文件服务]
C[FastAPI后端] --> D[ASGI服务器]
B --> E[Nginx反向代理]
D --> E
E --> F[CDN加速]
F --> G[最终用户]
这种FastAPI与React的结合不仅技术先进,更重要的是它提供了一种可维护、可扩展且高效的开发模式,是现代Web应用开发的理想选择。
Docker容器化部署架构
在现代Web应用开发中,Docker容器化部署已成为标准实践。Full Stack FastAPI PostgreSQL模板项目采用了一套精心设计的Docker容器化架构,实现了开发、测试和生产环境的无缝部署。该架构基于Docker Compose和Traefik反向代理,提供了完整的微服务部署解决方案。
核心容器服务架构
项目的Docker容器化部署包含多个关键服务组件,每个组件都承担着特定的职责:
flowchart TD
A[用户请求] --> B[Traefik反向代理]
B --> C[前端React应用]
B --> D[后端FastAPI服务]
B --> E[Adminer数据库管理]
D --> F[PostgreSQL数据库]
C --> D
E --> F
服务组件详细说明
| 服务名称 | 镜像 | 端口 | 主要功能 | 依赖关系 |
|---|---|---|---|---|
| db | postgres:17 | 5432 | PostgreSQL数据库服务 | 无 |
| adminer | adminer | 8080 | 数据库管理界面 | db |
| prestart | 自定义后端镜像 | 无 | 数据库初始化脚本 | db |
| backend | 自定义后端镜像 | 8000 | FastAPI后端API服务 | db, prestart |
| frontend | 自定义前端镜像 | 80 | React前端应用 | 无 |
| traefik | traefik:3.0 | 80/443 | 反向代理和SSL证书管理 | 所有服务 |
Traefik反向代理配置
Traefik作为整个架构的入口点,负责请求路由、SSL证书管理和负载均衡。项目的Traefik配置采用了现代化的标签驱动方式:
# Traefik服务标签配置示例
labels:
- traefik.enable=true
- traefik.docker.network=traefik-public
- traefik.http.services.${STACK_NAME}-backend.loadbalancer.server.port=8000
- traefik.http.routers.${STACK_NAME}-backend-https.rule=Host(`api.${DOMAIN}`)
- traefik.http.routers.${STACK_NAME}-backend-https.entrypoints=https
- traefik.http.routers.${STACK_NAME}-backend-https.tls=true
- traefik.http.routers.${STACK_NAME}-backend-https.tls.certresolver=le
路由规则设计
项目采用了基于子域名的路由策略,为不同服务分配专用子域名:
flowchart LR
A[traefik.domain.com] --> B[Traefik管理面板]
C[api.domain.com] --> D[FastAPI后端服务]
E[dashboard.domain.com] --> F[React前端应用]
G[adminer.domain.com] --> H[数据库管理界面]
网络架构设计
项目的网络架构采用了Docker的多网络模式,确保服务间的安全通信:
flowchart TB
subgraph PublicNetwork [公共网络 traefik-public]
Traefik[Traefik Proxy]
end
subgraph InternalNetwork [内部网络 default]
PostgreSQL[PostgreSQL DB]
Backend[FastAPI Backend]
Frontend[React Frontend]
Adminer[Adminer UI]
end
Traefik -.->|路由流量| Backend
Traefik -.->|路由流量| Frontend
Traefik -.->|路由流量| Adminer
Backend -->|数据库连接| PostgreSQL
Adminer -->|数据库管理| PostgreSQL
环境变量管理
项目采用了分层环境变量配置策略,确保不同环境的安全性:
# 核心环境变量示例
export ENVIRONMENT=production
export DOMAIN=your-domain.com
export SECRET_KEY=$(python -c "import secrets; print(secrets.token_urlsafe(32))")
export POSTGRES_PASSWORD=$(python -c "import secrets; print(secrets.token_urlsafe(32))")
export FIRST_SUPERUSER=admin@example.com
export FIRST_SUPERUSER_PASSWORD=secure_password
环境变量分类表
| 类别 | 变量示例 | 用途 | 安全性要求 |
|---|---|---|---|
| 应用配置 | ENVIRONMENT, DOMAIN |
环境标识和域名配置 | 中等 |
| 安全密钥 | SECRET_KEY, POSTGRES_PASSWORD |
加密和认证 | 高 |
| 数据库配置 | POSTGRES_USER, POSTGRES_DB |
数据库连接参数 | 高 |
| 邮件服务 | SMTP_HOST, SMTP_USER |
邮件发送配置 | 高 |
| 监控配置 | SENTRY_DSN |
错误监控服务 | 中等 |
健康检查机制
项目为关键服务实现了完善的健康检查机制,确保服务的高可用性:
# PostgreSQL健康检查配置
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
interval: 10s
retries: 5
start_period: 30s
timeout: 10s
# FastAPI后端健康检查
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/api/v1/utils
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00- QQwen3-Coder-Next2026年2月4日,正式发布的Qwen3-Coder-Next,一款专为编码智能体和本地开发场景设计的开源语言模型。Python00
xw-cli实现国产算力大模型零门槛部署,一键跑通 Qwen、GLM-4.7、Minimax-2.1、DeepSeek-OCR 等模型Go06
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin08
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00