1. 项目背景与核心价值
作为一名经历过公考备考的开发者,我深知传统纸质刷题的低效与不便。去年我用Python+Flask+Vue搭建了一个在线刷题平台,上线后帮助3000+用户提升备考效率。这个全栈项目融合了前后端主流技术栈,实现了题库管理、智能组卷、错题本等核心功能。
公考备考有几个典型痛点:纸质题本携带不便、错题整理效率低、缺乏个性化练习。这个平台通过技术手段解决这些问题:
- 随时随地刷题:Web端+移动端自适应
- 智能推荐:根据用户错题数据动态调整练习策略
- 进度可视化:直观展示各模块掌握程度
技术选型上采用:
- 后端:Flask轻量灵活,适合快速迭代
- 前端:Vue组件化开发,维护成本低
- 数据库:MySQL存储结构化数据,Redis缓存热点数据
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 系统架构设计
2.1 技术栈组合方案
整个系统采用前后端分离架构:
code复制[浏览器] ←HTTP→ [Nginx] ←反向代理→ [Vue前端]
↑
│
[REST API]
↓
[Flask后端] ←→ [MySQL]
↑
│
[Celery] ←→ [Redis]
选择这套技术栈的考量:
- 开发效率:PyCharm对Python全栈支持完善
- 性能平衡:Flask比Django更轻量,适合高频交互场景
- 扩展性:Vue的组件化方便后期添加新功能模块
2.2 数据库设计要点
核心表结构设计(简化版):
python复制class Question(db.Model):
id = db.Column(db.Integer, primary_key=True)
content = db.Column(db.Text)
q_type = db.Column(db.String(20)) # 单选/多选/判断
options = db.Column(db.JSON) # 使用JSON存储选项
answer = db.Column(db.String(100))
subject = db.Column(db.String(50)) # 行测/申论等
knowledge_point = db.Column(db.String(100))
class UserAnswer(db.Model):
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
question_id = db.Column(db.Integer, db.ForeignKey('question.id'))
is_correct = db.Column(db.Boolean)
timestamp = db.Column(db.DateTime)
特别说明几个设计决策:
- 使用JSON字段存储题目选项,避免多表关联查询
- 用户答题记录单独建表,便于错题分析
- 添加知识点标签字段,为智能推荐打基础
3. 核心功能实现
3.1 智能组卷算法
实现按需组卷的核心逻辑:
python复制def generate_paper(user_id, count=20):
# 获取用户最近错题
wrong_questions = UserAnswer.query.filter_by(
user_id=user_id,
is_correct=False
