想成为编程小天才吗? 联系我们

📚 项目发展历程

代码求索 - 中小学生编程教育平台技术文档

代码求索Logo

代码求索 - 中小学生编程教育平台

一个专为中小学生打造的现代化编程教育平台,基于Flask开发,提供完整的课程管理、用户管理、博客系统、新闻管理等功能。平台专注于Python、C++、机器人编程、人工智能等编程教育内容。

🎯 项目概述

代码求索是一个专业的K-12编程教育平台,致力于让编程学习变得像玩游戏一样有趣。从Python到机器人,从基础到竞赛,让每个小朋友都能成为编程高手!平台采用现代化的技术栈,提供响应式设计,支持多角色用户管理,具备完整的后台管理系统。

v2.9.0最新更新:系统性能全面优化!🚀 实现全栈性能监控与优化,包括缓存机制、数据库查询优化、静态资源压缩等。前端页面加载速度提升2-10倍,管理后台响应时间大幅缩短。同时保留v2.8.0的题库系统、v2.7.0的SEO优化、v2.6.1的项目结构优化等所有核心功能!

✨ 核心功能

🎓 课程系统

  • 编程课程 - Python编程、C++编程、机器人编程、人工智能
  • 课程展示 - 完整的课程列表和详情页面
  • 课程管理 - 后台课程CRUD操作
  • 课程安排 - 时间表管理和状态跟踪
  • 讲师分配 - 课程与讲师的关联管理
  • 课节管理 - 课程下的多课节组织和管理(v2.1.0新增)
  • 课件系统 - 支持PPT、PDF、视频等多种课件格式(v2.1.0新增)
  • PPT转换服务 - 自动将PPT转换为多页图片,支持无人值守运行(v2.6.0新增)
  • 在线预览系统 - 全屏PPT预览,支持多页轮播、缩略图导航、动画效果(v2.6.0新增)
  • 智能导航 - 点击切换、键盘导航、自动滚动到当前页面(v2.6.0新增)
  • 排课管理 - 授课次数设置和排课日期管理
  • 权限控制 - 公开课节和学员专享课节权限管理

👥 用户系统

  • 多角色支持 - 学生、讲师、管理员、员工、合作伙伴
  • 权限管理 - 基于角色的访问控制
  • 用户注册 - 完整的注册和登录流程
  • 会话管理 - 安全的用户会话处理,支持"记住我"功能
  • 个人信息管理 - 头像上传、基本信息编辑、地区三级联动选择
  • 批量导入 - Excel模板下载和批量用户导入功能
  • 动态字段 - 根据用户角色动态显示专用字段
  • 地区选择 - 完整的中国省市区县三级联动选择器
  • 角色专用字段 - 学生(学校、入学年份、父母职业、学习状况)、讲师(专业领域、教学经验)、员工(部门、职位)

📝 内容管理

  • 博客系统 - 教育资讯和文章发布
  • 新闻管理 - 最新资讯和行业动态
  • 富文本编辑 - 集成Quill.js编辑器,统一公共函数管理(v2.6.0优化)
  • 图片管理 - 支持图片上传和展示,富文本内容图片自动清理(v2.6.0新增)
  • 文章统计 - 阅读数、分享数、点赞数统计

💬 留言系统 (v2.5.0新增)

  • 多内容支持 - 课程、博客、新闻页面留言功能
  • 留言提交 - 用户可发表留言,支持姓名、邮箱、内容
  • 审核机制 - 留言需要管理员审核通过才能显示
  • 邮件通知 - 新留言自动发送邮件通知到管理员
  • 邮件管理 - 通过邮件链接直接审核、隐藏、删除留言
  • 管理员回复 - 支持管理员回复用户留言
  • IP记录 - 记录留言者IP地址和地理位置信息
  • 状态管理 - 待审核、已通过、已拒绝、已隐藏四种状态

📧 邮件营销系统

  • 邮件订阅 - 用户邮箱订阅功能,支持前台订阅和后台管理
  • 订阅者管理 - 订阅者列表查看、状态切换、删除管理
  • 邮件模板管理 - 可编辑的邮件模板系统,支持多种模板类型
  • 自动邮件通知 - 智能化的邮件发送系统
  • 邮件营销策略 - 多种营销邮件类型和策略
  • 退订管理 - 用户友好的退订功能和状态管理
  • SMTP集成 - 使用126邮箱服务,支持UTF-8编码

💰 支付系统

  • 多种支付方式 - 支持支付宝、微信支付、银行转账三种支付方式
  • 支付流程管理 - 完整的支付状态跟踪和管理
  • 支付信息生成 - 动态生成支付链接、二维码和银行信息
  • 支付确认机制 - 用户支付完成后的确认和状态更新
  • 支付记录管理 - 完整的支付记录和交易历史
  • 收款方配置 - 可配置的收款方信息和客服联系方式
  • 配置文件管理 - 通过 payment_config.py 统一管理支付配置

💼 财务管理模块

  • 财务概览 - 总收入、净收入、总支出、总退款的统计展示
  • 财务记录管理 - 收入、支出、退款记录的完整管理
  • 报表生成系统 - 日报、周报、月报、季报、半年报、年报
  • 统计分析功能 - 多维度财务数据分析和可视化
  • 日期筛选查询 - 自定义日期范围和快速选择功能
  • 权限控制 - 仅管理员和员工可访问财务功能

🎨 界面设计

  • 响应式设计 - 支持各种设备访问
  • 现代化UI - 基于Bootstrap 5的美观界面
  • 轮播展示 - 新闻动态图片轮播
  • 图标系统 - Font Awesome图标库
  • 主题色彩 - 专业的教育平台配色方案

🔍 SEO优化系统 (v2.7.0新增)

  • Meta标签优化 - 每个页面都有优化的标题、描述、关键词
  • 结构化数据 - JSON-LD格式的组织和课程信息
  • 站点地图 - 自动生成XML站点地图包含所有页面
  • Robots.txt - 指导搜索引擎爬虫行为
  • 社交媒体优化 - 完整的微信、Facebook分享优化
  • 图片SEO - 所有图片都有alt属性优化
  • 内部链接优化 - 优化的页面间链接结构
  • 移动端SEO - 移动端友好的SEO配置

📚 题库系统 (v2.8.0新增)

  • 知识点管理 - 层级化知识点体系,支持父子关系和多级分类
  • 题目管理 - 支持5种题型:单选、多选、判断、填空、主观题
  • 智能去重 - 入库时自动检测重复题目,避免冗余
  • 批量导入 - Excel模板批量导入,支持多种题型
  • 智能组卷 - 根据知识点、难度、题型等条件自动组卷
  • 在线考试 - 完整的在线考试系统,支持实时答题
  • 自动批阅 - 除主观题外所有题型自动批阅评分
  • 成绩统计 - 详细的成绩分析和题目统计
  • PDF导出 - 试卷可导出为PDF文档供离线使用
  • 权限管理 - 管理员、教师、员工可维护题库
  • 独立数据库 - 使用独立SQLite数据库,避免与主系统冲突
  • 树形管理界面 - 直观的折叠式知识点管理,支持PDF导出
  • 递归操作 - 支持递归删除和层级更新,确保数据一致性

⚡ 性能优化系统 (v2.9.0全新功能)

  • 全栈性能监控 - 实时监控所有API响应时间,自动识别慢请求
  • 智能缓存机制 - 多级缓存策略,首页数据缓存10分钟,课程数据缓存30分钟
  • 数据库查询优化 - 预加载关联数据,减少N+1查询问题,慢请求优化13倍
  • 静态资源压缩 - Gzip压缩CSS、JS、HTML等静态文件,减少传输时间
  • 前端页面优化 - 首页、课程详情、关于我们等关键页面性能提升2-10倍
  • 缓存清理机制 - 数据更新时自动清理相关缓存,保证数据一致性
  • 性能监控面板 - 可视化性能数据,慢请求统计,缓存命中率分析
  • Markdown转换缓存 - README.md实时转换缓存,避免重复计算
  • 知识点树缓存 - 复杂知识点树结构缓存,大幅提升题库系统性能
  • 全局性能监控 - 性能监控移至左侧导航,支持全局系统监控

🛠️ 技术栈

后端技术

  • Flask 3.0.0 - Python Web框架
  • SQLAlchemy 3.1.1 - ORM数据库操作
  • Flask-Mail 0.9.1 - 邮件发送功能
  • Flask-Compress 1.18 - 响应压缩优化
  • SQLite - 轻量级数据库
  • Werkzeug 3.0.1 - WSGI工具库
  • Jinja2 3.1.2 - 模板引擎
  • 性能监控系统 - 自定义性能监控装饰器和统计系统
  • 智能缓存机制 - 内存缓存系统,支持过期时间和自动清理
  • 静态资源压缩 - Gzip压缩中间件,自动压缩静态文件

前端技术

  • Bootstrap 5.1.3 - 响应式UI框架
  • jQuery 3.6.0 - JavaScript库
  • Font Awesome 6.0.0 - 图标库
  • ECharts 5.4.3 - 数据可视化
  • Quill.js 1.3.6 - 富文本编辑器
  • Bootstrap Icons 1.7.2 - 图标库

开发工具

  • Python 3.7+ - 编程语言
  • Pillow 10.2.0 - 图像处理
  • openpyxl 3.1.2 - Excel文件处理
  • pandas 2.1.4 - 数据分析
  • python-pptx 0.6.23 - PowerPoint处理
  • ReportLab 4.0.4 - PDF文档生成

📁 项目结构

CodeQuest/
├── app.py                          # 主应用文件
├── requirements.txt                # 项目依赖
├── README.md                       # 项目说明文档
├── start.bat                       # Windows启动脚本
├── stop.bat                        # Windows停止脚本
├── codequest.db                    # SQLite数据库文件
├── question_bank.db                # 题库系统独立数据库文件
├── init_db.py                      # 数据库初始化脚本
├── payment_config.py               # 支付系统配置文件
├── ppt_converter_service_windows.py # PPT转换服务(Windows专用)
├── static/                         # 静态资源目录
│   ├── css/                        # 样式文件
│   │   ├── style.css               # 主样式文件
│   │   ├── style.css.gz            # 压缩版本
│   │   └── critical.css            # 关键CSS(性能优化)
│   ├── robots.txt                  # 搜索引擎爬虫指导文件(v2.7.0新增)
│   ├── js/                         # JavaScript文件
│   │   ├── script.js               # 主脚本文件
│   │   ├── script.js.gz            # 压缩版本
│   │   ├── lazy-load.js            # 懒加载脚本
│   │   ├── performance-monitor.js  # 性能监控脚本
│   │   ├── region-selector.js      # 地区选择器
│   │   ├── common-region-selector.js # 通用地区选择器
│   │   ├── modal-utils.js          # 通用模态弹窗工具(v2.6.0新增)
│   │   └── china_regions_complete.json # 地区数据
│   ├── images/                     # 图片资源
│   │   ├── bg/                     # 背景图片
│   │   │   ├── about-image.jpg
│   │   │   └── about.jpg
│   │   ├── blog/                   # 博客图片
│   │   │   ├── blog1.jpg
│   │   │   ├── blog2.jpg
│   │   │   ├── blog3.jpg
│   │   │   ├── news-1.jpg
│   │   │   ├── news-2.jpg
│   │   │   └── news-3.jpg
│   │   ├── clients/                # 客户图片
│   │   │   └── test-1.jpg
│   │   ├── course/                 # 课程图片
│   │   │   ├── course-1.jpg
│   │   │   ├── course-2.jpg
│   │   │   └── course-3.jpg
│   │   ├── team/                   # 团队图片
│   │   │   ├── team-1.jpg
│   │   │   ├── team-2.jpg
│   │   │   ├── team-3.jpg
│   │   │   ├── team-4.jpg
│   │   │   └── yws.png
│   │   ├── qr-codes/               # 二维码图片
│   │   │   ├── qq-qr.png
│   │   │   ├── wechat-qr.png
│   │   │   └── weibo-qr.png
│   │   ├── logo.png                # 网站Logo
│   │   ├── footer-logo.png         # 页脚Logo
│   │   └── placeholder.jpg         # 占位图片
│   ├── lib/                        # 第三方库(本地化)
│   │   ├── bootstrap/5.1.3/        # Bootstrap框架
│   │   │   ├── css/
│   │   │   │   ├── bootstrap.min.css
│   │   │   │   └── bootstrap.min.css.gz
│   │   │   └── js/
│   │   │       ├── bootstrap.bundle.min.js
│   │   │       └── bootstrap.bundle.min.js.gz
│   │   ├── fontawesome/6.0.0/      # Font Awesome图标
│   │   │   ├── css/
│   │   │   │   ├── all.min.css
│   │   │   │   └── all.min.css.gz
│   │   │   └── webfonts/
│   │   │       ├── fa-solid-900.woff2
│   │   │       ├── fa-regular-400.woff2
│   │   │       └── fa-brands-400.woff2
│   │   ├── jquery/3.6.0/           # jQuery库
│   │   │   ├── jquery.min.js
│   │   │   └── jquery.min.js.gz
│   │   ├── echarts/5.4.3/          # ECharts图表库
│   │   │   ├── echarts.min.js
│   │   │   └── echarts.min.js.gz
│   │   ├── quill/1.3.6/            # Quill编辑器
│   │   │   ├── quill.min.js
│   │   │   ├── quill.min.js.gz
│   │   │   ├── quill.snow.css
│   │   │   └── quill.snow.css.gz
│   │   └── bootstrap-icons/1.7.2/  # Bootstrap图标
│   │       ├── css/
│   │       │   ├── bootstrap-icons.css
│   │       │   └── bootstrap-icons.css.gz
│   │       └── fonts/
│   │           ├── bootstrap-icons.woff
│   │           └── bootstrap-icons.woff2
│   ├── uploads/                    # 用户上传文件
│   │   ├── avatars/                # 用户头像
│   │   │   ├── 0cd76b85-c4cb-4b7a-9d94-680198dfc900.png
│   │   │   ├── 4449d3d1-2013-4742-a5b8-8c1d0b5d8bdd.png
│   │   │   ├── 8ca69d20-15b0-4046-89c3-af80565d8f78.png
│   │   │   ├── 8f1bb13d-8e09-4c10-9e45-58bad14376e6.png
│   │   │   ├── b1206014-369c-4e49-97c1-180d8d7a6cbe.png
│   │   │   └── f1fd5034-f087-4e47-956d-cd7e471c73b9.png
│   │   ├── course_images/          # 课程图片
│   │   │   └── 3_b3c319fb.png
│   │   ├── courseware/             # 课件文件
│   │   │   ├── 1-2Python_8626e19f.pptx
│   │   │   ├── 1.pptx
│   │   │   └── 3-4_b1052f38.pptx
│   │   ├── courseware_images/      # PPT转换后的图片(v2.6.0新增)
│   │   │   ├── 1-2Python_8626e19f/  # 每个PPT对应一个文件夹
│   │   │   │   ├── slide_0.jpg
│   │   │   │   ├── slide_1.jpg
│   │   │   │   └── ... (19张图片)
│   │   │   ├── 3-4_b1052f38/
│   │   │   │   ├── slide_0.jpg
│   │   │   │   ├── slide_1.jpg
│   │   │   │   └── ... (14张图片)
│   │   │   └── 1/
│   │   │       ├── slide_0.jpg
│   │   │       ├── slide_1.jpg
│   │   │       └── ... (24张图片)
│   │   ├── images/                 # 富文本编辑器图片
│   │   └── videos/                 # 视频文件
│   │       └── python_1d2c2f2f.mp4
│   ├── favicon.ico                 # 网站图标
│   ├── favicon-16x16.png           # 16x16图标
│   └── favicon-32x32.png           # 32x32图标
└── templates/                      # 模板文件
    ├── base.html                   # 基础模板
    ├── index.html                  # 首页模板
    ├── about.html                  # 关于页面
    ├── blog.html                   # 博客列表
    ├── blog_detail.html            # 博客详情
    ├── contact.html                # 联系我们
    ├── course_detail.html          # 课程详情
    ├── course_lesson_detail.html   # 课节详情
    ├── courses.html                # 课程列表
    ├── email_operation_result.html # 邮件操作结果
    ├── instructor_application.html # 讲师申请
    ├── login.html                  # 登录页面
    ├── news.html                   # 新闻列表
    ├── project-docs.html           # 项目文档
    ├── register.html               # 注册页面
    ├── search.html                 # 搜索页面
    ├── unsubscribe.html            # 退订页面
    ├── includes/                   # 模板片段(v2.6.0新增)
    │   └── rich_text_editor.html   # 富文本编辑器模板片段
    └── admin/                      # 管理后台模板
        ├── admin_base.html         # 管理后台基础模板
        ├── add_assignment.html     # 添加作业
        ├── add_blog.html           # 添加博客
        ├── add_category.html       # 添加分类
        ├── add_course_lesson.html  # 添加课节
        ├── add_course.html         # 添加课程
        ├── add_expense.html        # 添加支出
        ├── add_news.html           # 添加新闻
        ├── add_partner.html        # 添加合作伙伴
        ├── add_refund.html         # 添加退款
        ├── add_schedule.html       # 添加课程安排
        ├── add_user.html           # 添加用户
        ├── assignments.html        # 作业管理
        ├── available_courses.html  # 可用课程
        ├── blogs.html              # 博客管理
        ├── categories.html         # 分类管理
        ├── comments.html           # 留言管理
        ├── course_detail.html      # 课程详情(管理)
        ├── course_lessons.html     # 课节管理
        ├── courses.html            # 课程管理
        ├── dashboard.html          # 仪表板
        ├── edit_blog.html          # 编辑博客
        ├── edit_category.html      # 编辑分类
        ├── edit_course_lesson.html # 编辑课节
        ├── edit_course.html        # 编辑课程
        ├── edit_email_template.html # 编辑邮件模板
        ├── edit_news.html          # 编辑新闻
        ├── edit_user.html          # 编辑用户
        ├── email_marketing.html    # 邮件营销
        ├── email_templates.html    # 邮件模板
        ├── finance_dashboard.html  # 财务仪表板
        ├── finance_reports.html    # 财务报告
        ├── messages.html           # 消息管理
        ├── my_courses.html         # 我的课程
        ├── news.html               # 新闻管理
        ├── partners.html           # 合作伙伴管理
        ├── payment_settings.html   # 支付设置
        ├── payment.html            # 支付管理
        ├── products.html           # 产品管理
        ├── profile.html            # 个人资料
        ├── schedule.html           # 课程安排
        ├── send_message.html       # 发送消息
        ├── student_course_detail.html # 学生课程详情
        ├── subscribers.html        # 订阅者管理
        ├── users.html              # 用户管理
        ├── view_user.html          # 查看用户
        ├── question_bank.html      # 题库系统主页
        ├── knowledge_points.html   # 知识点管理
        └── knowledge_point_tree_item.html # 知识点树形结构模板

🚀 安装和运行

环境要求

  • Python 3.7+ (支持Python 3.13)
  • Windows 10/11 或 Linux/macOS
  • 至少2GB可用内存
  • 至少1GB可用磁盘空间

快速开始

1. 克隆项目

git clone <repository-url>
cd CodeQuest

2. 安装依赖

pip install -r requirements.txt

3. 初始化数据库(首次运行)

python init_db.py

4. 运行项目

# 直接运行
python app.py

# 或使用Windows批处理脚本(推荐)
start.bat

5. 访问应用

打开浏览器访问:http://localhost:8000

6. 启动PPT转换服务(可选)

如果需要使用PPT在线预览功能,需要启动PPT转换服务:

# 启动PPT转换服务
python ppt_converter_service_windows.py

注意:PPT转换服务需要安装LibreOffice和ImageMagick,详细安装指南请参考项目根目录的安装脚本。

🗄️ 数据库管理

数据库初始化

项目使用 init_db.py 脚本来初始化数据库,该脚本会:

功能说明

  • 创建数据库表 - 自动创建所有必需的数据表
  • 插入初始数据 - 添加默认的管理员账号和基础数据
  • 设置索引 - 创建数据库索引以优化查询性能
  • 数据验证 - 确保数据库结构的完整性

使用方法

# 首次部署时运行
python init_db.py

# 重置数据库(会删除所有数据)
python init_db.py --reset

注意事项

  • 首次运行项目前必须执行数据库初始化
  • 重置数据库会删除所有现有数据,请谨慎使用
  • 建议在生产环境中备份数据库后再进行重置操作

数据库文件

  • 主数据库 - codequest.db (SQLite数据库文件)
  • 初始化脚本 - init_db.py (数据库初始化脚本)

💰 支付系统配置

配置文件说明

项目使用 payment_config.py 文件统一管理支付系统的所有配置信息,包括:

支付方式配置

  • 支付宝配置 - 账户名称、账户号码、二维码账户、联系电话等
  • 微信支付配置 - 账户名称、账户号码、二维码账户、联系电话等
  • 银行转账配置 - 银行名称、支行名称、账户信息、SWIFT代码等

客服信息配置

  • 联系方式 - 电话、邮箱、微信、QQ等
  • 工作时间 - 客服服务时间
  • 地址信息 - 公司地址

支付说明模板

  • 支付宝说明 - 支付步骤和注意事项
  • 微信支付说明 - 支付步骤和注意事项
  • 银行转账说明 - 转账步骤和注意事项

配置修改

在部署到生产环境时,请根据实际情况修改 payment_config.py 中的以下信息:

  1. 收款方信息 - 修改为实际的收款账户信息
  2. 客服信息 - 修改为实际的客服联系方式
  3. 营业执照号 - 修改为实际的营业执照号码
  4. 公司地址 - 修改为实际的公司地址

安全注意事项

  • 请妥善保管支付配置文件
  • 不要将包含真实支付信息的配置文件提交到公共代码仓库
  • 建议在生产环境中使用环境变量或加密配置文件

🧹 项目清理说明

已清理的文件类型

项目已进行过全面清理,删除了以下类型的文件:

调试和测试文件

  • 所有调试脚本(diagnose_*.bat, test_*.bat, fix_*.bat
  • 测试页面和脚本文件
  • 临时HTML文件
  • 开发过程中的临时文件

部署和配置文件

  • 部署脚本(deploy_*.bat, deploy_*.ps1, deploy.sh
  • 配置文件(nginx_*.conf, gunicorn.conf.py, web.config
  • 服务配置文件(codequest.service, codequest_service.py
  • 安装和修复脚本(install_*.bat, fix_*.bat

启动和管理脚本

  • 复杂的启动脚本(start_complete_service.bat, start_basic_service.bat等)
  • 状态检查脚本(status_*.bat
  • 停止和重启脚本(stop_*.bat, restart_*.bat
  • 只保留简化版启动脚本(start.bat)和停止脚本(stop.bat

文档和指南文件

  • 部署指南(server_deployment_guide.md, windows_server_deployment.md
  • 快速部署指南(QUICK_DEPLOY_GUIDE.md
  • 安全检查指南(check_security_group.md

日志和缓存文件

  • PPT转换服务日志
  • 应用运行日志
  • 调试日志文件
  • Python缓存目录(__pycache__

清理效果

  • 项目结构更清晰 - 只保留运行服务必需的文件
  • 减少存储空间 - 删除了约100MB的调试、测试、部署文件
  • 避免混淆 - 删除了所有调试文件,只保留生产就绪的文件
  • 便于维护 - 清晰的文件结构便于后续维护和部署

当前项目状态

项目现在处于生产就绪状态,包含: - ✅ 完整的Flask应用(app.py) - ✅ 所有必需的静态资源(static/目录) - ✅ 完整的模板系统(templates/目录) - ✅ 用户上传的文件(static/uploads/目录) - ✅ PPT转换服务(ppt_converter_service_windows.py) - ✅ 支付系统配置(payment_config.py) - ✅ 数据库初始化脚本(init_db.py) - ✅ 启动脚本(start.bat) - ✅ 停止脚本(stop.bat) - ✅ 项目依赖文件(requirements.txt) - ✅ 数据库文件(codequest.db) - ✅ 项目文档(README.md

依赖包说明

项目使用requirements.txt管理所有Python依赖包,包含以下主要组件:

Flask核心框架

  • Flask 3.0.0 - 主Web框架
  • Flask-SQLAlchemy 3.1.1 - 数据库ORM
  • Flask-Mail 0.9.1 - 邮件发送
  • Flask-Compress 1.18 - 响应压缩

数据处理

  • Pillow 10.2.0 - 图像处理
  • openpyxl 3.1.2 - Excel文件处理
  • pandas 2.1.4 - 数据分析
  • python-pptx 0.6.23 - PowerPoint处理

系统工具

  • Werkzeug 3.0.1 - WSGI工具
  • Jinja2 3.1.2 - 模板引擎
  • MarkupSafe 2.1.3 - 安全标记

安装注意事项

  1. Python 3.13用户:先运行 pip install --upgrade pip setuptools wheel
  2. Pillow安装失败:使用 pip install Pillow --only-binary=all
  3. Windows用户:确保安装了Visual C++ Build Tools

🎮 使用指南

管理员功能

  1. 登录管理后台 - 使用管理员账号登录
  2. 用户管理 - 添加、编辑、删除用户
  3. 课程管理 - 创建和管理编程课程
  4. 内容管理 - 发布博客和新闻
  5. 财务管理 - 查看财务数据和生成报表
  6. 留言管理 - 审核和管理用户留言
  7. 支付配置 - 通过 payment_config.py 配置支付信息
  8. 数据库管理 - 使用 init_db.py 初始化或重置数据库

讲师功能

  1. 课程管理 - 查看分配的课程
  2. 课节管理 - 管理课程下的具体课节
  3. 课件上传 - 上传PPT、PDF等课件
  4. 学生管理 - 查看课程学员信息

学生功能

  1. 浏览课程 - 查看所有可用课程
  2. 课程报名 - 报名感兴趣的课程
  3. 学习进度 - 查看学习进度和作业
  4. 留言互动 - 在课程页面留言交流

📊 性能优化

已完成的优化项目

1. 数据库优化 ✅

  • 37个数据库索引已创建,覆盖所有关键查询字段
  • 查询性能提升91.6%(仪表板查询从0.1370秒降至0.0115秒)
  • N+1查询问题已解决
  • 复杂统计查询已优化

2. 静态资源优化 ✅

  • Flask-Compress压缩已启用,自动压缩响应内容
  • 预压缩静态文件,总体压缩率73.5%
  • 节省空间1.32MB(从1.79MB压缩至0.47MB)
  • Nginx配置已准备,支持预压缩文件

3. 模板渲染优化 ✅

  • 模板缓存机制已实现,提升20-30%渲染速度
  • 模板复杂度优化,减少15-25%渲染时间
  • 模板辅助函数已创建,提高代码复用性
  • 优化模板示例已提供

4. 缓存机制 ✅

  • 内存缓存系统已实现,支持自动过期
  • Redis缓存配置已准备(可选)
  • 缓存装饰器已提供,简化缓存使用
  • 缓存监控工具已创建

5. 前端资源优化 ✅

  • 关键CSS内联已实现,减少首屏渲染时间
  • 懒加载机制已配置,优化图片和资源加载
  • 性能监控脚本已创建,实时监控Core Web Vitals
  • 响应式图片方案已提供

性能提升效果

整体性能

  • 页面加载时间: 减少50-70%
  • 数据库查询性能: 提升60-90%
  • 服务器负载: 降低40-60%
  • 用户体验: 显著改善

具体指标

  • 首屏渲染: 减少40-60%
  • 静态资源压缩率: 73.5%
  • 缓存命中率: 可达到80-95%
  • 数据库索引: 37个关键索引

性能监控

关键指标

  • 页面加载时间: < 2秒
  • 首屏渲染时间: < 1秒
  • 数据库查询时间: < 100ms
  • 缓存命中率: > 80%

监控工具

  • 浏览器DevTools
  • Lighthouse性能测试
  • 自定义性能监控脚本
  • 缓存监控面板

🐳 Docker部署

Docker基本概念

镜像(Image)

  • 比喻:就像房子的设计图纸
  • 作用:包含运行应用所需的所有文件和配置
  • 特点:只读的,不能修改

容器(Container)

  • 比喻:根据图纸建成的房子
  • 作用:镜像的运行实例,实际运行你的应用
  • 特点:可以启动、停止、删除

仓库(Repository)

  • 比喻:就像应用商店
  • 作用:存储和分享镜像的地方
  • 例子:Docker Hub是最常用的公共仓库

安装和配置

检查Docker是否安装

docker --version

作用:查看Docker版本,确认安装成功

查看Docker详细信息

docker info

作用:显示Docker的详细配置信息

基础命令

镜像管理

# 查看本地镜像
docker images

# 搜索镜像
docker search ubuntu

# 拉取镜像
docker pull ubuntu:20.04

# 删除镜像
docker rmi ubuntu

容器管理

# 运行容器
docker run -it ubuntu bash

# 查看容器
docker ps -a

# 启动/停止容器
docker start container_id
docker stop container_id

# 进入容器
docker exec -it container_id bash

# 查看容器日志
docker logs container_id

# 删除容器
docker rm container_id

数据管理

# 创建数据卷
docker volume create my-volume

# 使用数据卷
docker run -v my-volume:/data ubuntu

# 绑定挂载
docker run -v /host/path:/container/path ubuntu

网络管理

# 查看网络
docker network ls

# 创建网络
docker network create my-network

# 连接容器到网络
docker network connect my-network container_id

Dockerfile使用

基本指令

# 指定基础镜像
FROM python:3.9

# 设置工作目录
WORKDIR /app

# 复制依赖文件
COPY requirements.txt .

# 安装依赖
RUN pip install -r requirements.txt

# 复制应用代码
COPY . .

# 暴露端口
EXPOSE 8000

# 运行应用
CMD ["python", "app.py"]

构建镜像

docker build -t codequest-app .

Docker Compose使用

基本文件结构

version: '3.8'

services:
  web:
    build: .
    ports:
      - "8000:8000"
    environment:
      - DEBUG=1
    volumes:
      - .:/app

  db:
    image: sqlite:latest
    volumes:
      - db_data:/var/lib/sqlite

常用命令

# 启动服务
docker-compose up -d

# 停止服务
docker-compose down

# 查看服务状态
docker-compose ps

# 查看日志
docker-compose logs

实用技巧

清理命令

# 清理所有未使用的资源
docker system prune

# 查看Docker使用的磁盘空间
docker system df

批量操作

# 停止所有容器
docker stop $(docker ps -q)

# 删除所有容器
docker rm $(docker ps -aq)

常见问题解决

1. 容器无法启动

docker logs container_id

解决:查看容器日志,找出错误原因

2. 端口被占用

netstat -tulpn | grep :8080

解决:检查端口占用情况,更换端口

3. 权限问题

docker run --user 1000:1000 ubuntu

解决:指定用户ID运行容器

🎨 图片优化指南

图片格式优化

  • 使用WebP格式(现代浏览器支持)
  • 提供JPEG/PNG作为备用格式
  • 使用响应式图片(srcset)

图片压缩

  • 使用工具如TinyPNG、ImageOptim等
  • 设置合适的压缩质量(80-90%)
  • 移除EXIF数据

懒加载实现

<!-- 懒加载图片 -->
<img data-src="{{ url_for('static', filename='images/course.jpg') }}" 
     src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1 1'%3E%3C/svg%3E"
     class="lazy" 
     alt="课程图片">

<!-- 响应式图片 -->
<picture>
    <source media="(min-width: 768px)" 
            srcset="{{ url_for('static', filename='images/course-large.webp') }}">
    <source media="(min-width: 768px)" 
            srcset="{{ url_for('static', filename='images/course-large.jpg') }}">
    <img src="{{ url_for('static', filename='images/course-small.jpg') }}" 
         alt="课程图片" class="img-fluid">
</picture>

图片尺寸建议

  • 缩略图: 300x200px
  • 中等图片: 600x400px
  • 大图: 1200x800px
  • 保持宽高比

图片CDN配置

  • 使用CDN加速图片加载
  • 设置适当的缓存头
  • 启用图片压缩

🔧 本地化部署

概述

将项目中所有外部CDN资源下载到本地,实现完全离线部署。

需要下载的外部资源

1. Bootstrap 5.1.3

  • CSS文件: https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css
  • 保存到: static/lib/bootstrap/5.1.3/css/bootstrap.min.css
  • JS文件: https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js
  • 保存到: static/lib/bootstrap/5.1.3/js/bootstrap.bundle.min.js

2. Font Awesome 6.0.0

  • CSS文件: https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css
  • 保存到: static/lib/fontawesome/6.0.0/css/all.min.css
  • 字体文件: 需要下载3个woff2字体文件到webfonts目录

3. jQuery 3.6.0

  • JS文件: https://code.jquery.com/jquery-3.6.0.min.js
  • 保存到: static/lib/jquery/3.6.0/jquery.min.js

4. ECharts 5.4.3

  • JS文件: https://cdn.jsdelivr.net/npm/echarts@5.4.3/dist/echarts.min.js
  • 保存到: static/lib/echarts/5.4.3/echarts.min.js

5. Quill 1.3.6

  • CSS文件: https://cdn.quilljs.com/1.3.6/quill.snow.css
  • 保存到: static/lib/quill/1.3.6/quill.snow.css
  • JS文件: https://cdn.quilljs.com/1.3.6/quill.min.js
  • 保存到: static/lib/quill/1.3.6/quill.min.js

6. Bootstrap Icons 1.7.2

  • CSS文件: https://cdn.jsdelivr.net/npm/bootstrap-icons@1.7.2/font/bootstrap-icons.css
  • 保存到: static/lib/bootstrap-icons/1.7.2/css/bootstrap-icons.css
  • 字体文件: 需要下载2个字体文件到fonts目录

下载方法

方法1: 浏览器下载

  1. 打开浏览器
  2. 访问上述每个链接
  3. 右键保存到指定路径
  4. 确保文件名和路径完全一致

方法2: 使用下载工具

# 使用 wget (如果可用)
wget -O static/lib/bootstrap/5.1.3/css/bootstrap.min.css https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css

# 使用 curl (如果可用)
curl -o static/lib/bootstrap/5.1.3/css/bootstrap.min.css https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css

验证下载

下载完成后,运行以下命令验证:

python test_local_deployment.py

本地化部署状态

  • 已完成: Font Awesome、jQuery、Quill等核心库
  • 待完成: Bootstrap、ECharts、Bootstrap Icons
  • 总体进度: 约70%完成

📈 版本历史

v2.9.0 (2025-09-28) - 系统性能全面优化 ⚡🚀

  • 全栈性能监控 - 实时监控所有API响应时间,自动识别慢请求
  • 🚀 智能缓存机制 - 多级缓存策略,首页数据缓存10分钟,课程数据缓存30分钟
  • 🔧 数据库查询优化 - 预加载关联数据,减少N+1查询问题,慢请求优化13倍
  • 📦 静态资源压缩 - Gzip压缩CSS、JS、HTML等静态文件,减少传输时间
  • 🎯 前端页面优化 - 首页、课程详情、关于我们等关键页面性能提升2-10倍
  • 🧹 缓存清理机制 - 数据更新时自动清理相关缓存,保证数据一致性
  • 📊 性能监控面板 - 可视化性能数据,慢请求统计,缓存命中率分析
  • 📝 Markdown转换缓存 - README.md实时转换缓存,避免重复计算
  • 🌳 知识点树缓存 - 复杂知识点树结构缓存,大幅提升题库系统性能
  • 🎛️ 全局性能监控 - 性能监控移至左侧导航,支持全局系统监控

v2.8.0 (2025-09-22) - 题库系统全面上线 📚🎯

  • 📚 知识点管理 - 层级化知识点体系,支持父子关系和多级分类
  • 🎯 题目管理 - 支持5种题型:单选、多选、判断、填空、主观题
  • 🔍 智能去重 - 入库时自动检测重复题目,避免题库冗余
  • 📊 批量导入 - Excel模板批量导入,支持多种题型格式
  • 🎲 智能组卷 - 根据知识点、难度、题型、题量等条件自动组卷
  • 💻 在线考试 - 完整的在线考试系统,支持实时答题和进度保存
  • 自动批阅 - 除主观题外所有题型自动批阅评分
  • 📈 成绩统计 - 详细的成绩分析和题目正确率统计
  • 📄 PDF导出 - 试卷可导出为PDF文档供离线使用
  • 👥 权限管理 - 管理员、教师、员工可维护题库,权限分级管理
  • 🗄️ 独立数据库 - 使用独立SQLite数据库(question_bank.db),避免与主系统冲突
  • 🌳 树形管理界面 - 直观的折叠式知识点管理,支持课程分组和树形展示
  • 🔄 递归操作 - 支持递归删除和层级更新,确保数据一致性
  • 📋 PDF知识点导出 - 支持按课程导出知识点为PDF文档,包含页眉页脚
  • 🎨 UI优化 - 紧凑的界面设计,移除面包屑,统一模态窗口操作
  • 🔧 动态表单 - 知识点层级动态计算,父知识点智能筛选
  • 🛡️ 数据完整性 - 完善的约束检查和错误处理机制

v2.7.0 (2025-09-20) - 全面SEO优化完成 🔍🚀

  • 🔍 Meta标签优化 - 每个页面都有优化的标题、描述、关键词标签
  • 📊 结构化数据 - 添加JSON-LD格式的组织和课程信息,提升搜索引擎理解
  • 🗺️ 站点地图生成 - 自动生成XML站点地图,包含所有静态和动态页面
  • 🤖 Robots.txt配置 - 指导搜索引擎爬虫行为,优化索引效率
  • 📱 社交媒体优化 - 完整的微信、Facebook、Twitter分享优化
  • 🖼️ 图片SEO优化 - 所有图片都有alt属性,提升可访问性
  • 🔗 内部链接优化 - 优化页面间链接结构,提升用户体验
  • 📈 SEO测试系统 - 创建完整的SEO测试脚本,所有页面得分95%以上
  • 🎯 关键词策略 - 针对编程教育领域的关键词优化
  • 🌐 移动端SEO - 移动端友好的SEO配置

v2.6.1 (2025-09-20) - 项目结构优化与清理 🧹✨

  • 🧹 全面项目清理 - 删除所有调试、测试、部署文件,只保留生产就绪文件
  • 🚀 简化启动脚本 - 创建start.bat,一键启动所有服务
  • 🛑 停止脚本 - 创建stop.bat,一键停止所有服务
  • 📁 项目结构优化 - 清理约100MB的临时文件,项目结构更清晰
  • 🔧 服务集成优化 - 集成Python应用、Nginx、PPT转换服务启动
  • 📚 文档更新 - 更新README.md反映清理后的项目结构
  • 生产就绪 - 项目现在处于完全生产就绪状态

v2.6.0 (2025-09-19) - PPT转换与在线预览系统 🎬📊

  • 🎬 PPT转换服务 - 自动将PPT转换为多页图片,支持无人值守运行
  • 📊 在线预览系统 - 全屏PPT预览,支持多页轮播、缩略图导航
  • 🎨 智能导航功能 - 点击切换、键盘导航、自动滚动到当前页面
  • 动画效果优化 - 图片切换动画、缩略图悬停效果、按钮交互动画
  • 🏷️ 课节标题显示 - 模态弹窗标题显示"第X课 课节标题"格式
  • 🧹 富文本编辑器优化 - 统一公共函数管理,避免重复代码
  • 🗑️ 图片清理功能 - 删除内容时自动清理富文本中的图片资源
  • 🔧 模态弹窗系统 - 通用模态弹窗工具,支持动态内容加载
  • 🧽 项目结构优化 - 全面清理项目文件,删除测试、临时、重复文件
  • 📚 文档整合 - 将所有MD文档整合到README.md,保持项目结构整洁

v2.5.0 (2025-09-17) - 完整留言系统上线 💬📧

  • 💬 留言系统核心功能 - 完整的用户互动系统
  • 📧 邮件通知系统 - 智能的邮件管理功能
  • 🔧 性能优化完成 - 全面的性能提升

v2.4.1 (2025-09-16) - 后台管理菜单优化 🎨

  • 🎨 菜单分组优化 - 清晰的功能分组和视觉分隔
  • 📱 空间优化设计 - 更紧凑的菜单布局
  • 👥 角色权限适配 - 不同角色的菜单显示

v2.4.0 (2025-09-15) - 支付系统与财务管理 💰

  • 💰 支付系统功能 - 多种支付方式支持
  • 📊 财务管理模块 - 完整的财务数据管理
  • 📈 财务报表生成 - 多维度财务分析

v2.3.0 (2025-09-14) - 邮件营销系统 📧

  • 📧 邮件订阅功能 - 用户邮箱订阅管理
  • 📝 邮件模板系统 - 可编辑的邮件模板
  • 📊 订阅者管理 - 完整的订阅者管理功能

v2.2.0 (2025-09-13) - 数据清理系统 🗑️

  • 🗑️ 完整数据清理 - 安全的删除操作
  • 📁 文件管理工具 - 智能的文件清理
  • 🔒 权限控制 - 严格的删除权限验证

v2.1.0 (2025-09-12) - 课程课节管理系统 📚

  • 📚 课节管理功能 - 课程下的多课节组织
  • 📄 课件文件管理 - 支持多种课件格式
  • 🎬 PPT在线播放 - 课件在线预览功能

v2.0.0 (2025-09-11) - 用户管理系统升级 👥

  • 👥 多角色用户系统 - 学生、讲师、管理员、员工、合作伙伴
  • 📊 批量导入功能 - Excel模板下载和批量导入
  • 🗺️ 地区三级联动 - 完整的中国省市区县选择器

🤝 贡献指南

如何贡献

  1. Fork 本仓库
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 打开 Pull Request

代码规范

  • 使用Python PEP 8代码风格
  • 添加适当的注释和文档字符串
  • 确保所有测试通过
  • 遵循项目的文件结构约定

📄 许可证

本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。

📞 联系我们

  • 项目地址: [GitHub Repository]
  • 问题反馈: [Issues Page]
  • 邮箱: ywsay@126.com
  • 电话: 18936220966

🎬 PPT转换与在线预览系统

系统概述

PPT转换与在线预览系统是v2.6.0版本的核心功能,提供完整的PPT文件自动转换和在线预览解决方案。

核心功能

1. 自动转换服务

  • 无人值守运行:支持Windows服务器环境,无需人工干预
  • 智能轮询:每20分钟自动检查待转换的PPT文件
  • 多页转换:将PPT转换为多张高质量图片(每页一张)
  • 状态管理:避免重复转换,只处理未转换的文件

2. 在线预览系统

  • 全屏预览:占满整个浏览器窗口的专业演示体验
  • 多页轮播:支持所有PPT页面的完整浏览
  • 智能导航
  • 点击上一页/下一页按钮
  • 点击主显示区域的左半部/右半部
  • 点击右侧缩略图直接跳转
  • 键盘导航(←→↑↓空格键切换,ESC关闭)
  • 自动滚动:播放到某张图片时自动滚动缩略图到对应位置

3. 动画效果

  • 图片切换动画:淡出→缩放→淡入的平滑过渡
  • 缩略图动画:悬停缩放、选中状态变化
  • 按钮动画:悬停上浮效果
  • 过渡动画:所有元素都有平滑的过渡效果

4. 课节标题显示

  • 智能识别:自动从页面中获取当前课节信息
  • 标准格式:显示"第X课 课节标题 - 在线预览 (X 页)"
  • 动态更新:根据当前展开的课节动态更新标题

技术实现

转换流程

  1. 文件检测:扫描static/uploads/courseware/目录
  2. 状态判断:检查PPT文件是否已转换(对比文件名和图片文件夹名)
  3. 自动转换:使用LibreOffice将PPT转换为PDF,再用ImageMagick转换为图片
  4. 存储图片:将图片保存到static/uploads/courseware_images/[PPT文件名]/目录
  5. 前台预览:用户点击"在线预览"时检查转换状态并显示图片

文件结构

static/uploads/
├── courseware/                    # PPT文件存储目录
│   ├── 1-2Python_8626e19f.pptx
│   ├── 3-4_b1052f38.pptx
│   └── 1.pptx
└── courseware_images/             # 转换后的图片存储目录
    ├── 1-2Python_8626e19f/       # 每个PPT对应一个文件夹
    │   ├── slide_0.jpg
    │   ├── slide_1.jpg
    │   └── ... (19张图片)
    ├── 3-4_b1052f38/
    │   ├── slide_0.jpg
    │   ├── slide_1.jpg
    │   └── ... (14张图片)
    └── 1/
        ├── slide_0.jpg
        ├── slide_1.jpg
        └── ... (24张图片)

安装和配置

系统要求

  • Windows 10/11Linux/macOS
  • LibreOffice 25.8.1+(用于PPT转PDF)
  • ImageMagick 最新版本(用于PDF转图片)
  • Ghostscript(ImageMagick的PDF处理依赖)

安装步骤

  1. 安装LibreOffice bash # 下载地址:https://www.libreoffice.org/download/ # 推荐版本:LibreOffice 25.8.1 Windows x64

  2. 安装ImageMagick bash # 下载地址:https://imagemagick.org/script/download.php#windows # 安装时勾选"Add application directory to your system path"

  3. 安装Ghostscript bash # 下载地址:https://www.ghostscript.com/download/gsdnld.html # 选择适合您系统的版本

  4. 验证安装 ```bash # 测试LibreOffice libreoffice --version

# 测试ImageMagick convert -version ```

  1. 启动服务 ```bash # 使用自动化脚本 python ppt_converter_service_windows.py

# 或使用批处理文件 start_ppt_converter_windows.bat ```

使用方法

后台管理

  1. 在课程管理中上传PPT课件
  2. 系统自动检测并开始转换
  3. 转换完成后,前台即可在线预览

前台预览

  1. 访问课程详情页面
  2. 在课节中找到PPT课件
  3. 点击"在线预览"按钮
  4. 享受全屏PPT浏览体验

性能优化

转换质量设置

  • DPI设置:150 DPI(平衡质量和文件大小)
  • 图片质量:90%(高质量输出)
  • 格式选择:JPG格式(最佳压缩比)

轮询优化

  • 轮询间隔:20分钟(可配置)
  • 智能检测:只处理未转换的文件
  • 错误处理:转换失败自动重试

故障排除

常见问题

  1. LibreOffice未找到 错误: LibreOffice 未安装或不在PATH中 解决: 安装LibreOffice并确保在系统PATH中

  2. ImageMagick未找到 错误: ImageMagick 未安装或不在PATH中 解决: 安装ImageMagick并确保在系统PATH中

  3. 转换超时 错误: 转换超时 解决: 检查PPT文件是否损坏,或增加超时时间

  4. 权限问题 错误: 无法创建目录或写入文件 解决: 检查目录权限,确保服务有写入权限

手动测试

# 测试LibreOffice
libreoffice --version

# 测试ImageMagick
convert -version

# 手动转换测试
libreoffice --headless --convert-to pdf --outdir ./test test.pptx
convert -density 150 -quality 90 test.pdf slide_%d.jpg

安全注意事项

  1. 文件验证:服务只处理PPT/PPTX文件
  2. 路径安全:使用安全的文件名处理
  3. 资源限制:设置转换超时时间防止资源耗尽
  4. 日志记录:记录所有操作便于审计

🔍 SEO优化系统详解

系统概述

CodeQuest v2.7.0版本完成了全面的SEO优化,所有页面的SEO得分都达到95%以上,让网站更容易被搜索引擎发现和收录,显著提升在线可见性和用户获取能力。

优化成果

SEO测试结果

所有主要页面的SEO得分都在95%以上:

页面 SEO得分 优化状态
首页 95% 🎉 优秀
关于我们 95% 🎉 优秀
课程列表 95% 🎉 优秀
联系我们 95% 🎉 优秀
新闻中心 95% 🎉 优秀
博客列表 95% 🎉 优秀

技术实现

1. Meta标签优化

  • Title标签: 每个页面都有描述性强、包含关键词的标题
  • Meta Description: 120-160字符的页面描述
  • Meta Keywords: 相关关键词标签
  • Canonical URL: 避免重复内容问题
  • Robots标签: 明确搜索引擎索引指令

2. 结构化数据 (JSON-LD)

<script type="application/ld+json">
{
    "@context": "https://schema.org",
    "@type": "EducationalOrganization",
    "name": "代码求索",
    "description": "专业的在线编程教育平台",
    "teaches": ["Python编程", "C++编程", "机器人编程"]
}
</script>

3. 技术SEO

  • XML站点地图: /sitemap.xml 自动生成,包含所有页面
  • Robots.txt: /robots.txt 指导搜索引擎爬虫行为
  • 图片优化: 所有图片都有alt属性
  • 内部链接: 优化的页面间链接结构

4. 社交媒体优化

  • Open Graph: Facebook/微信分享优化
  • Twitter Cards: Twitter分享优化
  • 微信特定: 专门的微信分享标签

关键词策略

主要关键词

  • 编程教育、Python编程、C++编程
  • 机器人编程、人工智能、中小学生编程
  • 编程考级、在线教育、编程培训
  • 少儿编程、青少年编程、编程竞赛

长尾关键词

  • 中小学生编程能力提高
  • 在线编程教育平台
  • Python编程入门课程
  • 编程小天才培养

预期效果

搜索引擎优化

  • 🚀 更容易被发现: 搜索引擎能更快找到和索引页面
  • 📈 更好的排名: 相关关键词搜索排名提升
  • 🔍 更准确描述: 搜索结果显示更准确的页面描述

用户体验提升

  • 📱 更好的分享: 微信、Facebook等平台分享效果更佳
  • 🎯 更清晰导航: 优化的内部链接结构
  • 更快加载: 技术优化提升页面性能

维护工具

测试脚本

  • test_seo_optimization.py - 全面的SEO测试脚本
  • 使用方法:python test_seo_optimization.py

监控建议

  1. 使用Google Search Console监控收录情况
  2. 定期检查站点地图是否包含新页面
  3. 监控关键词排名变化
  4. 定期更新博客和新闻内容

⚡ 性能优化系统详解 (v2.9.0重大更新)

系统概述

CodeQuest v2.9.0版本实现了全面的性能优化系统,通过智能缓存、数据库查询优化、静态资源压缩等技术手段,显著提升了系统的响应速度和用户体验。系统采用全栈性能监控,实时跟踪系统性能指标。

重大更新亮点

🚀 全栈性能监控

  • 实时监控 - 所有API接口都有性能监控装饰器
  • 慢请求识别 - 自动识别超过100ms阈值的慢请求
  • 性能统计 - 记录调用次数、平均耗时、最大耗时、最小耗时
  • 可视化面板 - 性能监控面板显示实时性能数据
  • 全局监控 - 性能监控移至左侧导航,支持全局系统监控

🧠 智能缓存机制

  • 多级缓存策略 - 不同数据采用不同的缓存时间
  • 首页数据缓存 - 热门课程、最新博客、最新新闻缓存10分钟
  • 课程数据缓存 - 课程详情、相关课程、课节数据缓存30分钟
  • 知识点树缓存 - 复杂知识点树结构缓存,大幅提升题库系统性能
  • Markdown转换缓存 - README.md转换结果缓存30分钟
  • 缓存清理机制 - 数据更新时自动清理相关缓存

🔧 数据库查询优化

  • N+1查询优化 - 使用预加载减少数据库查询次数
  • 慢请求优化 - admin_questions从1314ms优化到<100ms,提升13倍
  • 查询缓存 - 频繁查询的数据使用缓存机制
  • 索引优化 - 数据库索引优化,提升查询效率

📦 静态资源压缩

  • Gzip压缩 - 自动压缩CSS、JS、HTML、JSON等静态文件
  • 压缩率统计 - 显示压缩文件数量和压缩效果
  • 智能压缩 - 跳过logo等不需要压缩的文件
  • 缓存控制 - 压缩文件设置长期缓存头

🎯 前端页面优化

  • 首页优化 - 首页加载时间从无监控优化到<50ms
  • 课程详情优化 - 课程详情页性能提升2-10倍
  • 关于我们优化 - 教师数据缓存,页面加载更快
  • 项目文档优化 - README.md转换缓存,避免重复计算
  • 课程列表优化 - 分类数据缓存,列表加载更快

性能提升效果

📊 优化前后对比

功能模块 优化前 优化后 提升倍数
admin_questions 1314ms <100ms 13倍
admin_courses 100ms <50ms 2倍
users 112ms <50ms 2倍
首页加载 未监控 <50ms 首次优化
课程详情 未监控 <100ms 缓存优化
项目文档 未监控 <30ms 转换缓存

🎯 缓存命中率

  • 首页数据缓存 - 10分钟缓存,命中率>90%
  • 课程数据缓存 - 30分钟缓存,命中率>95%
  • 知识点树缓存 - 命中率>98%,大幅提升题库性能
  • Markdown转换缓存 - 命中率>99%,避免重复计算

📈 系统性能指标

  • API响应时间 - 平均响应时间<100ms
  • 慢请求比例 - 从>50%降低到<5%
  • 缓存命中率 - 整体缓存命中率>90%
  • 静态资源压缩 - 压缩率>70%,传输时间减少50%

技术实现细节

性能监控装饰器

@performance_monitor
def api_function():
    # 自动记录执行时间和性能统计
    pass

智能缓存系统

# 缓存设置
set_cache(cache_key, data, expire_minutes)

# 缓存获取
data = get_cache(cache_key)

静态资源压缩

# 自动压缩静态文件
compress_all_static_files()

# 中间件处理压缩文件
@app.before_request
def handle_static_compression():
    # 自动返回压缩文件

监控和维护

性能监控面板

  • 实时性能数据 - 显示各API的执行时间
  • 慢请求统计 - 识别和统计慢请求
  • 缓存命中率 - 显示缓存使用情况
  • 系统健康度 - 整体系统性能评估

缓存管理

  • 自动清理 - 数据更新时自动清理相关缓存
  • 手动清理 - 支持手动清理特定类型缓存
  • 缓存统计 - 显示缓存使用情况和命中率

📚 题库系统详解 (v2.8.0重大更新)

系统概述

CodeQuest v2.8.0版本新增了完整的题库系统,为编程教育提供全面的考试和练习解决方案。系统采用独立数据库架构,支持多种题型、智能组卷、在线考试、自动批阅等核心功能。

重大更新亮点

🗄️ 独立数据库架构

  • 独立SQLite数据库 - 使用question_bank.db,完全独立于主系统数据库
  • 避免冲突 - 与主系统codequest.db完全分离,避免表名冲突和关系冲突
  • 数据安全 - 题库数据独立存储,便于备份和迁移
  • 扩展性 - 支持未来升级到MySQL或PostgreSQL

🌳 树形知识点管理

  • 层级化结构 - 支持无限级知识点分类,父子关系清晰
  • 课程关联 - 知识点可与特定课程关联,也可设为通用
  • 折叠式界面 - 使用Bootstrap Accordion实现课程分组展示
  • 树形展示 - 递归模板实现知识点树形结构显示
  • 动态层级 - 知识点层级根据父知识点自动计算和更新

🔄 递归操作支持

  • 递归删除 - 删除知识点时自动删除所有子知识点
  • 层级更新 - 修改父知识点时自动更新所有后代层级
  • 数据一致性 - 确保知识点层级关系始终正确
  • 智能筛选 - 编辑时自动排除自身和后代知识点作为父选项

📋 PDF导出功能

  • 按课程导出 - 支持将单个课程的所有知识点导出为PDF
  • 专业格式 - 包含页眉(课程标题+Logo)、页脚(页码)
  • 树形结构 - PDF中保持知识点的层级结构显示
  • 中文支持 - 完美支持中文字符,使用系统字体
  • 高质量图片 - Logo使用PIL预处理,解决PNG透明度问题

🎨 界面优化

  • 紧凑设计 - 小字体、小图标、紧密间距,适应大量知识点
  • 无边框设计 - 移除树形结构边框,更加简洁
  • 模态窗口 - 所有增删改查操作统一使用模态窗口
  • 无面包屑 - 移除所有页面面包屑,界面更简洁
  • 动态表单 - 知识点层级实时计算和显示

📥 知识点批量导入功能

功能概述

实现了从Markdown模板批量导入知识点的功能,支持结构化知识点导入、自动课程创建、去重处理等特性。

核心功能

  • 📄 设计Markdown模板 - 结构化的层级设计(支持3级知识点)
  • 🎨 前端界面设计 - 导入按钮、模态窗口、文件上传、预览功能
  • 🔧 后端处理逻辑 - 文件格式验证、Markdown解析、数据库事务处理
  • 📊 智能处理特性 - 自动课程创建、去重处理、层级关系建立

使用流程

  1. 下载模板 - 点击"从模板导入知识点"按钮,下载标准化Markdown模板
  2. 编辑内容 - 按照模板格式编辑知识点内容,设置课程名称和描述
  3. 上传导入 - 选择编辑好的文件,配置导入选项,预览后开始导入
  4. 查看结果 - 系统显示导入统计信息,自动刷新知识点列表

技术实现

  • 前端技术 - Bootstrap 5模态窗口、JavaScript文件预览、HTML5文件上传
  • 后端技术 - Flask路由处理、SQLAlchemy数据库操作、正则表达式解析
  • 数据库操作 - 事务安全、层级关系、去重检查、错误回滚

🎯 知识点管理页面按钮增强功能

新增功能

  • 课程标题右侧按钮 - 点击后弹出模态窗口,自动预填充当前课程
  • 知识点右侧按钮 - 点击后弹出模态窗口,提供两个选项:
  • 当前知识点的父级(添加同级知识点)
  • 当前知识点本身(添加子知识点)

技术实现

  • 前端修改 - 模板文件更新、JavaScript函数新增
  • 后端路由 - 新增API端点,权限验证
  • 用户体验 - 直观操作流程、智能选项预填充、清晰选项说明

🔧 修复历程

知识点导入功能修复

  • Course模型字段错误 - 修正了不存在的字段(content、is_active、updated_at)
  • 知识点唯一约束错误 - 修改数据库约束为复合唯一约束(name + course_id)
  • Markdown解析优化 - 支持"示例:"前缀的课程标题,过滤模板内容
  • Logo透明度修复 - 修改优化脚本,跳过Logo文件并保持PNG格式和透明度

按钮显示修复

  • 课程标题栏按钮 - 添加图标和文字间距,调整CSS样式确保按钮在同一行显示
  • 知识点按钮 - 添加"添加知识点"文字显示,保持图标和文字的正确间距
  • 层级显示修复 - 修复编辑模式下层级显示逻辑,增加延迟时间和默认层级设置

🎨 界面设计优化

按钮位置修复

  • 折叠抽屉按钮 - 将按钮放在折叠抽屉的标题栏内部,与"导出PDF"按钮并排
  • 最终按钮修复 - 完全复制"导出PDF"按钮的代码结构,使用相同的HTML元素和CSS样式
  • 响应式设计 - 按钮在小屏幕设备上保持合适的尺寸,工具提示正常工作

视觉效果

现在的布局结构:

┌─────────────────────────────────────────────────────────┐
│ [📖] 课程标题 [导出PDF] [3个知识点] [➕添加知识点] [▼] │
└─────────────────────────────────────────────────────────┘

📊 性能优化总结

已完成的优化

  • 静态资源优化 - 压缩了8个CSS/JS文件,优化了19个图片文件,减少30-50%传输大小
  • 数据库优化 - 创建了24个数据库索引,覆盖常用查询字段,提升查询速度50-80%
  • 页面优化 - 添加了图片懒加载,优化了HTML结构,添加了预加载提示
  • 性能监控 - 分析资源使用,生成优化报告

优化效果

  • 页面加载时间 - 减少50-70%
  • 带宽使用 - 减少30-50%
  • 服务器响应 - 提升40-60%
  • 用户体验 - 显著改善

核心功能

1. 知识点管理

  • 层级化结构 - 支持多级知识点分类,父子关系清晰
  • 课程关联 - 知识点可与特定课程关联,也可设为通用
  • 状态管理 - 支持启用/禁用状态,灵活控制
  • 排序功能 - 自定义排序,便于管理

2. 题目管理

  • 5种题型支持
  • 单选题 - 4个选项,单选正确答案
  • 多选题 - 4个选项,多选正确答案
  • 判断题 - 正确/错误二选一
  • 填空题 - 文本输入,标准答案匹配
  • 主观题 - 开放性问题,需人工批阅
  • 智能去重 - 入库时自动检测重复题目
  • 审核机制 - 题目需审核通过才能使用
  • 统计功能 - 使用次数、正确率统计

3. 智能组卷

  • 灵活规则 - 支持题型、难度、知识点多维度筛选
  • 自动分配 - 根据规则自动选择题目
  • 分值设定 - 每种题型可设置不同分值
  • 随机化 - 支持题目顺序和选项顺序随机化

4. 在线考试

  • 实时答题 - 支持实时保存答题进度
  • 时间控制 - 可设置考试时长和时间限制
  • 防作弊 - 题目和选项随机化
  • 进度显示 - 实时显示答题进度

5. 自动批阅

  • 智能评分 - 除主观题外自动批阅
  • 即时反馈 - 答题后立即显示结果
  • 详细解析 - 提供题目解析和正确答案
  • 成绩统计 - 自动计算总分和各项得分

数据库设计

独立数据库架构

  • 主数据库: codequest.db - 存储用户、课程、博客等主系统数据
  • 题库数据库: question_bank.db - 存储所有题库相关数据,完全独立

核心数据表 (question_bank.db)

  1. knowledge_point - 知识点表
  2. 支持层级结构 (parent_id, level)
  3. 课程关联 (course_id)
  4. 状态管理 (is_active)
  5. question - 题目表
  6. 5种题型支持
  7. 难度等级管理
  8. 审核状态控制
  9. question_knowledge_points - 题目知识点关联表
  10. exam - 试卷表
  11. exam_question - 试卷题目关联表
  12. exam_attempt - 考试记录表
  13. exam_answer - 考试答案表
  14. question_template - 题目模板表

数据关系

  • 知识点与题目:多对多关系
  • 题目与试卷:多对多关系
  • 试卷与考试记录:一对多关系
  • 考试记录与答案:一对多关系
  • 知识点层级:自引用关系 (parent_id)

数据库配置

# app.py 中的数据库配置
SQLALCHEMY_BINDS = {
    'question_bank': 'sqlite:///question_bank.db'
}

# 创建独立的SQLAlchemy实例
question_bank_db = SQLAlchemy()

使用流程

管理员操作流程

  1. 创建知识点 - 建立知识体系结构
  2. 添加题目 - 单题添加或批量导入
  3. 审核题目 - 确保题目质量
  4. 创建试卷 - 设置组卷规则
  5. 发布考试 - 设置考试时间和权限

教师操作流程

  1. 查看题库 - 浏览可用题目
  2. 创建试卷 - 根据课程需求组卷
  3. 发布作业 - 布置练习或作业
  4. 批阅主观题 - 人工批阅开放性问题
  5. 查看成绩 - 分析学生答题情况

学生操作流程

  1. 参加考试 - 在线答题
  2. 查看结果 - 即时查看成绩
  3. 学习解析 - 查看题目解析
  4. 错题复习 - 重点学习错题

技术特点

前端技术

  • 响应式设计 - 支持各种设备访问
  • 实时更新 - AJAX技术实现无刷新操作
  • 用户友好 - 直观的操作界面
  • Bootstrap 5 - 现代化UI框架
  • 递归模板 - 知识点树形结构展示
  • 动态表单 - 实时计算和更新

后端技术

  • 独立数据库 - SQLAlchemy多数据库绑定
  • 递归算法 - 知识点层级管理和更新
  • 智能算法 - 高效的题目筛选和组卷算法
  • 数据完整性 - 严格的数据验证和约束
  • 性能优化 - 数据库查询优化和缓存机制
  • PDF生成 - ReportLab + PIL图像处理

安全特性

  • 权限控制 - 基于角色的访问控制
  • 数据验证 - 严格的输入验证
  • 防作弊 - 多种防作弊机制
  • 数据隔离 - 独立数据库避免数据冲突

关键技术实现

# 递归删除知识点
def delete_children_recursively(kp_id):
    children = KnowledgePoint.query.filter_by(parent_id=kp_id).all()
    for child in children:
        delete_children_recursively(child.id)
        # 检查是否被题目使用
        if Question.query.join(question_knowledge_points).filter(
            question_knowledge_points.c.knowledge_point_id == child.id
        ).first():
            flash(f'知识点"{child.name}"正在被题目使用,无法删除', 'error')
            return False
        question_bank_db.session.delete(child)
    return True

# 递归更新层级
def update_children_levels(kp_id, new_level):
    children = KnowledgePoint.query.filter_by(parent_id=kp_id).all()
    for child in children:
        child.level = new_level + 1
        update_children_levels(child.id, new_level + 1)

扩展功能

已实现功能

  • 知识点管理 - 层级化结构,递归操作,树形展示
  • 题目管理 - 5种题型支持,智能去重,审核机制
  • 智能组卷 - 多维度筛选,自动分配,随机化
  • 在线考试 - 实时答题,进度保存,时间控制
  • 自动批阅 - 智能评分,即时反馈,详细解析
  • 成绩统计 - 多维度分析,正确率统计
  • 权限管理 - 基于角色的访问控制
  • 独立数据库 - 完全独立的数据存储
  • PDF导出 - 知识点PDF导出,专业格式
  • 树形界面 - 折叠式管理,直观展示
  • 递归操作 - 层级更新,递归删除
  • 动态表单 - 实时计算,智能筛选

计划功能

  • 🔄 题目模板管理
  • 🔄 批量导入Excel
  • 🔄 PDF试卷导出
  • 🔄 高级统计分析
  • 🔄 移动端适配
  • 🔄 离线考试支持
  • 🔄 知识点导入导出
  • 🔄 题目难度自动评估

配置说明

环境要求

  • Python 3.7+
  • Flask 3.0.0+
  • SQLAlchemy 3.1.1+
  • ReportLab 4.0.4+ (PDF生成)
  • Pillow 10.2.0+ (图像处理)
  • 数据库:SQLite(可升级到MySQL/PostgreSQL)

安装步骤

  1. 安装依赖包 bash pip install -r requirements.txt

  2. 数据库初始化

  3. 主数据库:python init_db.py
  4. 题库数据库:自动创建question_bank.db

  5. 权限配置

  6. 管理员:完全访问权限
  7. 教师:题库维护权限
  8. 员工:题库维护权限

  9. 开始使用

  10. 访问:/admin/question-bank
  11. 知识点管理:/admin/knowledge-points

维护建议

日常维护

  1. 数据备份
  2. 定期备份question_bank.db文件
  3. 建议每日自动备份
  4. 知识点维护
  5. 定期审核知识点层级结构
  6. 更新过时的知识点内容
  7. 题目审核
  8. 定期审核新添加的题目
  9. 检查题目质量和解析准确性
  10. 性能监控
  11. 监控数据库查询性能
  12. 优化大量知识点时的加载速度

数据管理

  1. 题目管理
  2. 定期清理无效或过时题目
  3. 更新题目解析内容
  4. 优化题目分类和标签
  5. 知识点管理
  6. 维护知识点层级关系
  7. 分析知识点使用情况
  8. 优化知识点分类结构
  9. 统计分析
  10. 分析题目使用频率
  11. 统计知识点覆盖情况
  12. 评估题目难度分布

故障排除

  1. 数据库问题
  2. 检查question_bank.db文件权限
  3. 验证数据库表结构完整性
  4. PDF导出问题
  5. 检查ReportLab和Pillow安装
  6. 验证中文字体支持
  7. 权限问题
  8. 确认用户角色配置正确
  9. 检查路由权限设置

🙏 致谢

感谢易文胜先生及所有为这个项目做出贡献的开发者和用户!


⭐ 如果这个项目对你有帮助,请给它一个星标!

Made with ❤️ for K-12 Programming Education