# question_bank **Repository Path**: Jackzhou1/question_bank ## Basic Information - **Project Name**: question_bank - **Description**: 全功能刷题平台,支持单选/多选/判断/简答,Markdown 渲染,图片粘贴,收藏管理,响应式设计 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-04 - **Last Updated**: 2026-04-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 🧠 Question Bank | 在线题库系统
![Python](https://img.shields.io/badge/Python-3.10+-blue?logo=python) ![Flask](https://img.shields.io/badge/Flask-2.0.1-green?logo=flask) ![MySQL](https://img.shields.io/badge/MySQL-5.7+-orange?logo=mysql) ![License](https://img.shields.io/badge/License-MIT-yellow) **一个现代化、全功能的在线刷题平台** [特性](#-特性) • [快速开始](#-快速开始) • [使用说明](#-使用说明) • [技术栈](#-技术栈) • [项目结构](#-项目结构)
--- ## 🚀 特性亮点 | 功能模块 | 描述 | |---------|------| | 🔐 **权限管理** | 管理员/用户双角色,安全的会话认证 | | 📚 **题目分类** | 支持多学科分类(操作系统、计算机网络、数据结构等) | | 📝 **多种题型** | 单选题、多选题、判断题、简答题 | | 🖼️ **富文本支持** | 题干/选项支持 Markdown、图片上传/粘贴 | | ⭐ **收藏系统** | 一键收藏重点题目,随时回顾 | | 🔍 **智能搜索** | 支持题干、选项内容搜索 | | 📊 **分页展示** | 优雅的分页浏览体验 | | 🎨 **响应式设计** | 完美适配桌面/移动端 | | 🌙 **深色模式** | 内置暗色主题支持 | --- ## 🛠️ 技术栈 ``` ┌─────────────────────────────────────────────────────────────┐ │ Frontend │ │ ├── Bootstrap 5 (UI 框架) │ │ ├── jQuery (DOM 操作) │ │ ├── Font Awesome (图标库) │ │ └── Markdown2 (Markdown 渲染) │ ├─────────────────────────────────────────────────────────────┤ │ Backend │ │ ├── Flask 2.0.1 (Web 框架) │ │ ├── Flask-Bootstrap (表单渲染) │ │ ├── Flask-WTF (表单验证) │ │ ├── PyMySQL (数据库连接) │ │ └── Werkzeug (安全工具) │ ├─────────────────────────────────────────────────────────────┤ │ Database │ │ └── MySQL 5.7+ (关系型数据库) │ └─────────────────────────────────────────────────────────────┘ ``` --- ## 📦 快速开始 ### 环境要求 - Python 3.10+ - MySQL 5.7+ - Node.js (可选,仅前端开发) ### 1. 克隆项目 ```bash git clone https://github.com/JackZho/question_bank.git cd question_bank ``` ### 2. 安装依赖 ```bash pip install -r requirements.txt ``` ### 3. 配置环境变量 ```bash # 复制环境配置模板 cp .env-example .env # 编辑 .env 文件,配置数据库等信息 FLASK_ENV=development SECRET_KEY=your-secret-key-change-this DATABASE_HOST=localhost DATABASE_USER=root DATABASE_PASSWORD=your-password DATABASE_DB=question_bank_db ``` ### 4. 初始化数据库 ```bash # 登录 MySQL 执行 SQL 脚本 mysql -u root -p question_bank_db < question_bank_db.sql ``` ### 5. 启动服务 ```bash # 开发模式 python app.py # 或使用 Gunicorn 生产部署 gunicorn -w 4 -b 0.0.0.0:3000 app:app ``` 访问 `http://localhost:3000` 开始使用! --- ## 📖 使用说明 ### 管理员后台 1. 访问 `/admin/login` 登录管理后台 2. 默认管理员:`admin` / `adminpassword`(**请首次登录后修改**) ### 功能模块 | 路径 | 功能 | |-----|------| | `/` | 首页 - 浏览题目分类 | | `/category//` | 按分类浏览题目 | | `/favorites/` | 查看收藏题目 | | `/admin/dashboard` | 管理仪表盘 | | `/admin/questions` | 题目管理(CRUD) | | `/admin/categories` | 分类管理 | | `/admin/types` | 题型管理 | ### 题目操作 - ✅ **添加题目**:支持富文本编辑器,可粘贴图片 - ✏️ **编辑题目**:实时预览,支持 Markdown 语法 - 🗑️ **删除题目**:模态框确认,防止误删 - ⭐ **收藏题目**:一键收藏/取消收藏 --- ## 📁 项目结构 ``` question_bank/ ├── app.py # 应用入口 & 工厂函数 ├── config.py # 配置文件 ├── forms.py # WTForms 表单定义 ├── requirements.txt # Python 依赖 ├── question_bank_db.sql # 数据库初始化脚本 │ ├── routes/ │ ├── __init__.py │ ├── admin_routes.py # 管理员路由 │ └── client_routes.py # 用户路由 │ ├── templates/ │ ├── base.html # 基础模板 │ ├── index.html # 首页 │ ├── 404.html # 错误页 │ ├── client/ # 前端页面 │ │ ├── index.html │ │ ├── question_list.html │ │ └── favorites_list.html │ └── admin/ # 管理后台页面 │ ├── dashboard.html │ ├── login.html │ ├── list_questions.html │ ├── edit_question.html │ └── ... │ ├── static/ │ ├── css/ │ │ └── style.css # 全局样式(含深色模式) │ ├── js/ │ │ └── main.js # 前端交互(图片粘贴等) │ └── imgs/ # 上传图片存储目录 │ └── .env-example # 环境变量模板 ``` --- ## 🗄️ 数据库设计 ### 核心表结构 | 表名 | 描述 | |-----|------| | `admins` | 管理员账户 | | `categories` | 题目分类 | | `question_types` | 题型定义 | | `questions` | 题目主表 | | `options` | 题目选项 | | `favorites` | 用户收藏 | ### ER 关系 ``` admins ────────────────── (独立管理表) categories ──< questions >── question_types │ ├──< options │ └──< favorites ``` --- ## 🔒 安全特性 - 🔐 **密码加密**:PBKDF2-SHA256 哈希存储 - 🛡️ **CSRF 保护**:所有表单内置 CSRF Token - 🚫 **XSS 防护**:使用 Bleach 清理 HTML 输入 - 🔑 **会话管理**:安全的 Flask Session - 📵 **文件上传限制**:仅允许图片格式,最大 16MB --- ## 🎨 深色模式 系统内置深色主题支持,通过 `[data-bs-theme="dark"]` 属性切换: ```css [data-bs-theme="dark"] { --bs-body-bg: #212529; --bs-body-color: #f8f9fa; } ``` --- ## 🤝 贡献指南 欢迎提交 Issue 和 Pull Request! 1. Fork 本仓库 2. 创建特性分支 (`git checkout -b feature/AmazingFeature`) 3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 开启 Pull Request --- ## 📄 许可证 MIT License - 详见 [LICENSE](LICENSE) 文件 --- ## 👨‍💻 作者 **JackZhou** - GitHub: [@JackZho](https://github.com/JackZho) - Gitee: [@Jackzhou1](https://gitee.com/Jackzhou1) --- ## 🙏 致谢 感谢以下开源项目: - [Flask](https://flask.palletsprojects.com/) - [Bootstrap 5](https://getbootstrap.com/) - [PyMySQL](https://github.com/PyMySQL/PyMySQL) - [Markdown2](https://github.com/trentm/python-markdown2) ---
**Made with ❤️ by JackZho** ⭐ 如果这个项目对你有帮助,请给个 Star 支持一下!