基于 Streamlit 前端和 Flask 后端的Todo 应用

在这里插入图片描述

Demo地址:https://gitcode.com/rmbnetlife/todo-app-streamlit-py.git
在这里插入图片描述

Todo App (Streamlit + Flask)

一个基于 Streamlit 前端和 Flask 后端的现代化 Todo 应用,支持任务的增删改查和状态切换。经过性能优化,提供流畅的用户体验和高效的操作响应。

🏗️ 架构设计

整体架构

本项目采用前后端分离的架构模式,通过 RESTful API 进行通信:

┌─────────────────┐    HTTP/JSON     ┌─────────────────┐    File I/O    ┌─────────────────┐
│   Streamlit     │ ◄──────────────► │   Flask API     │ ◄────────────► │   JSON 存储      │
│   前端界面       │                  │   后端服务        │                │   todos.json    │
└─────────────────┘                  └─────────────────┘                └─────────────────┘

核心组件

  • Flask 后端: 提供 RESTful API,处理 Todo 数据的 CRUD 操作,支持数据验证和错误处理
  • Streamlit 前端: 构建交互式用户界面,实现实时数据展示和用户交互
  • 数据存储: 使用 JSON 文件进行数据持久化,支持热重载和数据备份
  • 跨域支持: 通过 Flask-CORS 实现前后端跨域通信

📁 项目结构

todo-app-streamlit-py/
├── backend/
│   ├── app.py          # Flask 后端主程序
│   └── todos.json      # 数据存储文件(运行时自动生成)
├── frontend/
│   └── app.py          # Streamlit 前端界面
├── requirements.txt    # 项目依赖
└── README.md          # 项目说明

🚀 快速开始

1. 克隆仓库

git clone https://gitcode.com/rmbnetlife/todo-app-streamlit-py.git
cd todo-app-streamlit-py

2. 安装依赖

pip install -r requirements.txt

3. 启动后端服务

cd backend
python app.py

后端服务将在 http://localhost:5000 启动

4. 启动前端界面

打开新的终端窗口:

cd frontend
streamlit run app.py

前端界面将在 http://localhost:8501 启动

✨ 功能特性

核心功能

  • 任务管理: 支持添加、编辑、删除和状态切换
  • 优先级设置: 高、中、低三级优先级,带颜色区分
  • 截止日期: 支持设置任务截止日期,自动提醒逾期
  • 智能筛选: 按优先级、状态、关键词多维度筛选
  • 实时统计: 动态显示任务完成率和统计信息
  • 批量操作: 支持批量标记任务完成/未完成,提升操作效率

用户体验

  • 🎨 现代化UI: 渐变色彩、卡片式布局、响应式设计
  • 实时更新: 操作后界面自动刷新,无需手动刷新
  • 🔍 搜索功能: 支持关键词搜索,快速定位任务
  • 📱 紧凑布局: 优化间距和排版,提升视觉体验
  • ⚠️ 错误处理: 友好的错误提示和连接状态检查

数据功能

  • 💾 数据持久化: JSON文件存储,支持数据备份
  • 🔄 状态同步: 前后端数据实时同步
  • 📊 数据验证: 后端数据验证,确保数据完整性

🔧 API 接口详解

1. 获取所有任务

GET /api/todos

响应示例:

[
  {
    "id": 1,
    "text": "完成项目文档",
    "completed": false,
    "priority": "高",
    "due_date": "2024-01-15",
    "created_at": "2024-01-10T10:30:00",
    "updated_at": "2024-01-10T10:30:00"
  }
]

2. 添加新任务

POST /api/todos
Content-Type: application/json

请求体:

{
  "text": "任务内容",
  "priority": "高|中|低",
  "due_date": "2024-01-15" // 可选
}

3. 更新任务内容

PUT /api/todos/{todo_id}/update
Content-Type: application/json

请求体:

{
  "text": "更新后的任务内容",
  "priority": "中",
  "due_date": "2024-01-20"
}

4. 切换任务状态

PUT /api/todos/{todo_id}

功能: 切换任务的完成/未完成状态

5. 删除任务

DELETE /api/todos/{todo_id}

响应: {"message": "Todo deleted"}

🛠️ 技术栈与实现原理

技术选型

组件技术栈版本职责优势
前端Streamlit1.28.1交互界面构建Python原生,快速开发,自动响应式
后端Flask2.3.3RESTful API服务轻量级,灵活扩展,丰富生态
跨域Flask-CORS4.0.0跨域请求处理简化前后端分离开发
HTTP客户端Requests2.31.0API请求处理简洁易用,异常处理完善
存储JSON内置数据持久化轻量级,易调试,跨平台

实现原理

后端实现 (Flask)
# 核心数据结构
todo_item = {
    'id': int,              # 唯一标识
    'text': str,            # 任务内容
    'completed': bool,      # 完成状态
    'priority': str,        # 优先级(高/中/低)
    'due_date': str,        # 截止日期(ISO格式)
    'created_at': str,      # 创建时间
    'updated_at': str       # 更新时间
}

关键实现特性:

  • 📝 数据验证: validate_todo_data() 函数确保数据完整性
  • 🔄 文件操作: load_todos()save_todos() 处理JSON读写
  • 🆔 ID生成: 自动递增ID,避免冲突
  • 时间戳: 自动记录创建和更新时间
  • 🛡️ 错误处理: 统一的错误响应格式
前端实现 (Streamlit)
# 核心状态管理
st.session_state = {
    'refresh_trigger': int,     # 刷新触发器
    'editing_{id}': bool,       # 编辑状态标记
    'new_todo_input': str       # 输入框状态
}

关键实现特性:

  • 🎛️ 状态管理: 使用 st.session_state 管理组件状态
  • 🔄 自动刷新: st.rerun() 实现操作后自动更新
  • 🎨 CSS样式: 自定义CSS实现现代化UI设计
  • 📊 实时统计: 动态计算和显示任务统计信息
  • 🔍 多维筛选: 支持文本搜索、优先级和状态筛选

🎯 适用场景与扩展方向

适用场景

  • 🚀 快速原型: 验证全栈应用概念,特别适合数据科学项目
  • 🐍 Python全栈: 统一技术栈,降低学习和维护成本
  • 👥 小团队协作: 轻量级任务管理,支持多用户访问
  • 📚 学习项目: 理解前后端分离架构的最佳实践
  • 🔬 内部工具: 企业内部快速搭建管理工具

扩展方向

  • 🗄️ 数据库集成: 替换JSON存储为MySQL/PostgreSQL
  • 👤 用户系统: 添加用户认证和权限管理
  • 📱 移动适配: 优化移动端显示效果
  • 🔔 消息通知: 集成邮件/微信提醒功能
  • 📈 数据分析: 添加任务完成趋势分析
  • 🌐 多语言: 国际化支持
  • 🔄 实时同步: WebSocket实现多用户实时协作

📝 使用说明

基本操作

  1. 在输入框中输入待办事项内容
  2. 点击"➕ 添加"按钮创建新任务
  3. 勾选复选框将任务标记为完成
  4. 点击"🗑️"按钮删除不需要的任务
  5. 任务会自动分类显示在"未完成"和"已完成"区域

高级功能

  1. 使用搜索框快速查找特定任务
  2. 通过优先级和状态筛选器过滤任务
  3. 点击"编辑"按钮修改任务内容、优先级和截止日期
  4. 使用批量操作按钮一次性标记多个任务完成/未完成

性能优化特性

  • 编辑任务时,所有修改在表单内完成,只有点击"保存"才会提交更改
  • 数据加载使用缓存机制,减少不必要的API请求
  • 操作后会显示成功提示,提升用户体验

🔄 开发模式与调试

热重载支持

项目支持开发时热重载,提升开发效率:

  • Flask 后端: debug=True 模式,代码修改后自动重启
  • Streamlit 前端: 文件变化时自动提示重新运行

调试技巧

# 后端调试
app.run(port=5000, debug=True)  # 启用调试模式

# 前端调试
st.write("Debug:", variable)    # 临时调试输出
st.json(data)                   # JSON数据可视化

日志记录

  • 后端: Flask内置日志,控制台输出请求信息
  • 前端: Streamlit控制台显示运行状态和错误信息
  • 数据: JSON文件可直接查看和编辑

性能优化

  • 🚀 缓存机制: 使用 @st.cache_data 装饰器缓存API请求结果,减少不必要的后端调用
  • 📦 批量操作: 支持批量标记完成/未完成,减少API调用频次
  • 🔄 刷新触发器: 使用刷新触发器机制,确保数据在需要时才更新
  • 📝 表单提交模式: 编辑功能改为表单提交模式,避免每次修改参数都自动刷新
  • 🎭 回调函数: 使用回调函数处理状态切换、编辑和删除操作,减少页面刷新
  • ⏱️ 延迟刷新: 添加成功消息提示,并使用短暂延迟让用户看到操作结果
  • 🎨 CSS优化: 自定义样式提升渲染性能

📋 注意事项与故障排除

启动顺序

⚠️ 重要: 必须先启动 Flask 后端服务,再启动 Streamlit 前端

常见问题

1. 端口冲突
# 修改后端端口
app.run(port=5001, debug=True)  # 改为5001端口

# 修改前端API地址
API_BASE_URL = "http://localhost:5001/api"

# 修改前端端口
streamlit run app.py --server.port 8502
2. 连接失败
  • 检查Flask服务是否正常启动
  • 确认防火墙设置允许本地端口访问
  • 验证API_BASE_URL配置正确
3. 数据丢失
  • 数据存储在 backend/todos.json 文件中
  • 删除此文件将清空所有数据
  • 建议定期备份JSON文件
4. 样式异常
  • 清除浏览器缓存
  • 检查CSS样式是否正确加载
  • 尝试刷新页面或重启Streamlit

部署建议

  • 🐳 Docker化: 使用Docker容器化部署
  • 🌐 反向代理: 使用Nginx作为反向代理
  • 🔒 HTTPS: 生产环境启用SSL证书
  • 📊 监控: 添加应用性能监控

🔄 代码更新与推送

本地开发工作流程

1. 拉取最新代码
# 获取远程仓库的最新更改
git pull origin main
2. 进行代码修改
  • 修改前端代码:frontend/app.py
  • 修改后端代码:backend/app.py
  • 更新文档:README.md
  • 添加新依赖:requirements.txt
3. 查看修改状态
# 查看当前修改的文件
git status

# 查看具体修改内容
git diff
4. 提交代码
# 添加所有修改的文件
git add .

# 或者添加特定文件
git add frontend/app.py backend/app.py

# 提交修改,使用有意义的提交信息
git commit -m "功能: 添加新的任务筛选功能"

# 提交信息建议格式:
# - "功能: 描述新增功能"
# - "修复: 描述修复的问题"
# - "优化: 描述性能或代码优化"
# - "文档: 更新文档内容"
5. 推送到远程仓库
# 推送到main分支
git push origin main

分支管理(推荐)

创建功能分支
# 创建并切换到新分支
git checkout -b feature/新功能名称

# 在分支上进行开发和提交
git add .
git commit -m "功能: 实现新功能"

# 推送分支到远程
git push origin feature/新功能名称
合并分支
# 切换回main分支
git checkout main

# 拉取最新代码
git pull origin main

# 合并功能分支
git merge feature/新功能名称

# 推送合并后的代码
git push origin main

# 删除已合并的分支(可选)
git branch -d feature/新功能名称
git push origin --delete feature/新功能名称

常用Git命令

# 查看提交历史
git log --oneline

# 撤销最后一次提交(保留修改)
git reset --soft HEAD~1

# 撤销工作区的修改
git checkout -- 文件名

# 查看远程仓库信息
git remote -v

# 查看所有分支
git branch -a

注意事项

  1. 提交前测试: 确保代码在本地正常运行后再提交
  2. 有意义的提交信息: 使用清晰描述性的提交信息
  3. 小步提交: 频繁提交小的功能改动,而不是一次性提交大量修改
  4. 忽略文件: 确保 .gitignore 文件正确配置,避免提交不必要的文件
  5. 数据备份: backend/todos.json 文件包含用户数据,已在 .gitignore 中排除

通过这个项目,你可以快速搭建一个现代化的全栈 Todo 应用!🎉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值