# 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 | 在线题库系统




**一个现代化、全功能的在线刷题平台**
[特性](#-特性) • [快速开始](#-快速开始) • [使用说明](#-使用说明) • [技术栈](#-技术栈) • [项目结构](#-项目结构)
---
## 🚀 特性亮点
| 功能模块 | 描述 |
|---------|------|
| 🔐 **权限管理** | 管理员/用户双角色,安全的会话认证 |
| 📚 **题目分类** | 支持多学科分类(操作系统、计算机网络、数据结构等) |
| 📝 **多种题型** | 单选题、多选题、判断题、简答题 |
| 🖼️ **富文本支持** | 题干/选项支持 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 支持一下!