当前位置:首页>python>Python实现驾考宝典驾考题库系统

Python实现驾考宝典驾考题库系统

  • 2026-09-24 08:25:12
Python实现驾考宝典驾考题库系统

驾考题库系统

通过网盘分享的文件:kiro-jiakaobaodian.rar

链接: https://pan.baidu.com/s/18lL8-PtDEH1h09uHAG5D6A? 复制这段内容后打开百度网盘手机App,操作更方便哦

项目结构

├── backend/                # Flask后端
│   ├── app.py             # 应用入口
│   ├── config.py          # 配置
│   ├── models.py          # 数据库模型
│   ├── utils.py           # 工具函数
│   ├── seed.py            # 测试数据初始化
│   ├── init_db.sql        # 建表SQL
│   ├── requirements.txt   # 依赖
│   └── routes/            # 路由模块
│       ├── admin_routes.py    # 管理员接口
│       ├── user_routes.py     # 用户接口
│       ├── question_routes.py # 题库接口(含增量更新)
│       ├── sync_routes.py     # 数据同步接口
│       └── study_routes.py    # 刷题业务接口
├── admin-frontend/         # 原生H5管理后台
│   ├── css/style.css
│   ├── js/api.js
│   ├── login.html
│   ├── index.html          # 仪表盘
│   ├── questions.html      # 题目管理
│   ├── knowledge.html      # 知识点分类
│   ├── version.html        # 版本发布
│   ├── users.html          # 用户管理
│   └── exam-config.html    # 考试配置
└── uniapp-mobile/          # UniApp移动端
    ├── pages/
    │   ├── index/          # 首页
    │   ├── login/          # 登录
    │   ├── chapter/        # 章节练习
    │   ├── practice/       # 刷题页
    │   ├── exam/           # 模拟考试
    │   ├── wrong/          # 错题本
    │   ├── favorite/       # 收藏
    │   └── profile/        # 个人中心
    └── utils/
        ├── request.js      # 网络请求封装
        ├── db.js           # SQLite工具类
        └── sync.js         # 增量同步工具类

启动方式

后端

cd backend
pip install -r requirements.txt
# 先在MySQL创建数据库 exam_db
python seed.py    # 初始化测试数据
python app.py     # 启动服务 http://localhost:5000

管理后台

直接用浏览器打开 admin-frontend/login.html,账号 admin / admin123

移动端(HBuilderX)

  1. 打开 HBuilderX,点击「文件 → 导入 → 从本地目录导入」,选择 uniapp-mobile 文件夹本身(不是它的上级目录)
  2. 导入后左侧项目树顶层应直接显示 manifest.json、pages.json、pages/ 等文件
  3. 运行到浏览器:点击菜单「运行 → 运行到浏览器 → Chrome」(或其他浏览器)
  4. HBuilderX 会自动编译并打开浏览器预览,默认地址 http://localhost:8080

注意:H5端无本地SQLite,所有操作直接走后端API,需确保 Flask 后端已启动。

业务流转图

┌─────────────────────────────────────────────────────────────┐
│                    系统整体数据流                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  [管理后台H5] ──POST/PUT──> [Flask API] ──写入──> [MySQL]    │
│       │                         │                           │
│  题目增删改查                     │ 发布版本                   │
│  版本发布                        ▼                           │
│  Excel导入              system_version表记录                  │
│                                                             │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  [UniApp APP端]                                             │
│       │                                                     │
│  ①首次安装 ──> GET /question/get_full_db                     │
│       │        下载完整SQLite压缩包,存入本地沙盒               │
│       ▼                                                     │
│  ②离线刷题 ──> 直接读取本地SQLite(question表)                │
│       │        做题记录写入本地 local_record(sync_status=0)  │
│       ▼                                                     │
│  ③联网自动同步(两步):                                       │
│     Step1: POST /question/get_diff                          │
│            上传本地版本号 → 返回增/改/删的题目列表              │
│            批量更新本地SQLite                                 │
│     Step2: POST /sync/upload                                │
│            上传 sync_status=0 的本地记录到云端                 │
│            POST /sync/pull                                   │
│            拉取云端其他设备的记录合并到本地                     │
│            (时间戳冲突解决:以更晚时间为准)                   │
│                                                             │
├─────────────────────────────────────────────────────────────┤
│  [UniApp H5端]                                              │
│    无本地SQLite,所有操作直接请求Flask API在线完成              │
└─────────────────────────────────────────────────────────────┘

数据冲突解决方案

  • 多设备同步冲突:以 updated_at 时间戳为准,较新的记录覆盖较旧的
  • 上传前检查:服务端对比已有记录时间,仅当上传时间更新时才覆盖
  • SQLite事务:本地批量操作使用事务保证原子性

开发注意事项

  1. H5端无SQLite,需在代码中做条件编译区分(#ifdef APP-PLUS)
  2. 题库更新采用差分机制,question表的version字段随每次修改递增
  3. 图片仅存URL,不做二进制存储
  4. Excel导入格式:题型|题干|选项A|B|C|D|答案|解析|知识点ID|车型|地区|难度
  5. 模拟考试按驾考比例组卷:判断40%、单选50%、多选10%

测试账号

  • 管理后台: admin / admin123
  • 移动端(UniApp): 13800000001 / 123456(需先运行 python seed.py 初始化)
  • 移动端也可直接点击「注册新账号」,输入任意手机号和密码即可注册并登录
from flask import Flaskfrom flask_cors import CORSfrom flask_jwt_extended import JWTManagerfrom config import Configfrom models import dbfrom routes.admin_routes import admin_bpfrom routes.user_routes import user_bpfrom routes.question_routes import question_bpfrom routes.sync_routes import sync_bpfrom routes.study_routes import study_bpimport osdef create_app():app = Flask(name)app.config.from_object(Config)CORS(app, supports_credentials=True)JWTManager(app)db.init_app(app)app.register_blueprint(admin_bp, url_prefix='/api/admin')app.register_blueprint(user_bp, url_prefix='/api/user')app.register_blueprint(question_bp, url_prefix='/api/question')app.register_blueprint(sync_bp, url_prefix='/api/sync')app.register_blueprint(study_bp, url_prefix='/api/study')os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True)with app.app_context():    db.create_all()return appif name == 'main':app = create_app()app.run(debug=True, host='0.0.0.0', port=5000)

通过网盘分享的文件:kiro-jiakaobaodian.rar

链接: https://pan.baidu.com/s/18lL8-PtDEH1h09uHAG5D6A? 复制这段内容后打开百度网盘手机App,操作更方便哦

最新文章

随机文章