No description
- Python 55%
- Vue 40%
- JavaScript 3.2%
- Batchfile 1.5%
- CSS 0.2%
- Other 0.1%
| backend | ||
| frontend | ||
| sql | ||
| .gitignore | ||
| _deploy_log.txt | ||
| _start_log.txt | ||
| README.md | ||
| 一键启动.bat | ||
| 一键部署.bat | ||
| 部署运行说明.txt | ||
大学生学业规划与备考资源综合服务平台
面向大学生的「证书 / 竞赛 / 备考 / 公开课」信息分类展示平台,帮助在校生系统了解大学期间该考的证书、值得参加的比赛、如何备考,以及可以选修的优质公开课。数据已内置,开箱即用。
技术栈:Vue 3 + Vite + Element Plus + ECharts(前端)| FastAPI + SQLAlchemy(后端)| MySQL 8(数据库)| Playwright(爬虫)
一、项目简介
系统围绕四大核心对象做分类展示与可视化统计,数据总量 1.4 万+ 条:
- 证书(21 条):英语类、计算机类、教师资格类、财会类、语言翻译类、通用/其他六大类,含考试时间、报名时间、难度、含金量、报名费、适合专业等(权威公开资料整理)。
- 比赛(5064 条):爬取自赛氪网(saikr.com)全国大学生竞赛平台,覆盖数学建模、程序设计、外语、创业等 40+ 细分类,含报名时间、比赛时间、级别、主办方、含金量等。
- 备考指南(12 条):考研、考公、英语考试、证书备考、竞赛备赛五大类,含时间线、备考资料、备考技巧等。
- 公开课(9430 门):爬取自中国大学 MOOC(icourse163.org),覆盖计算机、理学、工学、外语、经管、医学等 16 个学科,含开课学校、讲师、选课人数、课程链接等。
二、功能特性
前台门户(用户端)
- 首页:数据总览统计卡片 + 分类/级别分布图表(含课程分类、开课学校 Top20)
- 证书库:分类筛选、关键词搜索、卡片展示、详情弹窗
- 比赛库:分类 + 级别双筛选、搜索、详情弹窗
- 备考指南:类型筛选、搜索、详情弹窗(时间线/资料/技巧)
- 公开课:分类 + 学校双筛选、搜索、封面卡片、点击直达课程页
后台管理(管理员端,默认账号 admin / admin123)
- 证书管理:增删改查(CRUD)、搜索分页
- 比赛管理:增删改查(CRUD)、搜索分页
- 备考指南管理:增删改查(CRUD)、搜索分页
- 课程管理:增删改查(CRUD)、搜索分页
数据爬虫(Playwright + requests)
crawler/saikr_crawler.py:爬取赛氪全部大学生竞赛(约 5000 条)crawler/mooc_crawler.py:爬取中国大学 MOOC 各学科公开课(约 9000 门)
三、目录结构
大学证书比赛备考系统/
├── backend/ # 后端(FastAPI)
│ ├── app/
│ │ ├── main.py # 应用入口,注册路由
│ │ ├── config.py # 配置(读取 .env)
│ │ ├── database.py # SQLAlchemy 引擎与 Session
│ │ ├── models.py # ORM 模型(certificate / competition / prep_guide / course / admin_user)
│ │ ├── schemas.py # Pydantic 数据模型
│ │ ├── security.py # 密码哈希 + JWT
│ │ ├── seed_data.py # 种子脚本:建库 + 建表 + 写数据 + 管理员
│ │ ├── analysis/
│ │ │ └── service.py # 统计聚合服务
│ │ └── routers/
│ │ ├── auth.py # 登录认证
│ │ ├── certificates.py
│ │ ├── competitions.py
│ │ ├── prep_guides.py
│ │ ├── courses.py
│ │ └── analysis.py # 统计接口
│ ├── crawler/ # 数据爬虫
│ │ ├── saikr_crawler.py # 赛氪竞赛爬虫
│ │ └── mooc_crawler.py # 中国大学 MOOC 课程爬虫
│ ├── requirements.txt
│ └── .env # 数据库配置
├── frontend/ # 前端(Vue 3 + Vite)
│ └── src/
│ ├── api/index.js # axios 接口封装
│ ├── router/index.js # 路由配置
│ ├── layouts/ # 前台/后台布局
│ ├── components/ # StatCard / ChartCard
│ └── views/ # 页面视图
└── sql/
└── init.sql # 数据库初始化脚本
四、环境要求
- Python 3.10+
- Node.js 18+
- MySQL 8.x
五、快速开始
1. 初始化数据库(建库 + 建表 + 导入数据)
cd backend
python -m app.seed_data
该命令会自动创建
student_guide_db数据库、建表,写入 21 条证书、17 条比赛、12 条备考指南,以及默认管理员账号。海量比赛与课程数据再通过爬虫导入(见下方)。
2. 导入爬虫数据(可选,需联网)
cd backend
# 爬取赛氪大学生竞赛(约 5000 条)
python crawler/saikr_crawler.py
# 爬取中国大学 MOOC 公开课(约 9000 门)
python crawler/mooc_crawler.py
爬虫依赖 Playwright 与 requests,请先
pip install playwright requests并执行playwright install chromium。
3. 配置后端
将 backend/.env.example 复制为 backend/.env,按需修改数据库连接(默认 root 空密码)。
4. 启动后端
cd backend
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
uvicorn app.main:app --host 127.0.0.1 --port 8001
5. 启动前端
cd frontend
npm install --registry=https://registry.npmmirror.com --legacy-peer-deps
npm run dev
- 前台地址:http://localhost:5174
- 后台地址:http://localhost:5174/admin/login(账号
admin,密码admin123)
六、主要接口
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/certificates |
证书列表(分页 + 分类 + 搜索) |
| GET | /api/certificates/filters |
证书分类 |
| GET/POST/PUT/DELETE | /api/certificates/{id} |
证书详情 / 新增 / 更新 / 删除 |
| GET | /api/competitions |
比赛列表(分页 + 分类 + 级别 + 搜索) |
| GET/POST/PUT/DELETE | /api/competitions/{id} |
比赛详情 / 新增 / 更新 / 删除 |
| GET | /api/prep-guides |
备考指南列表 |
| GET/POST/PUT/DELETE | /api/prep-guides/{id} |
备考指南详情 / 增删改 |
| GET | /api/courses |
课程列表(分页 + 分类 + 学校 + 搜索) |
| GET | /api/courses/filters |
课程分类 / 学校 |
| GET/POST/PUT/DELETE | /api/courses/{id} |
课程详情 / 增删改 |
| GET | /api/analysis/overview |
数据总览 |
| GET | /api/analysis/certificate-category |
证书类别分布 |
| GET | /api/analysis/certificate-difficulty |
证书难度分布 |
| GET | /api/analysis/competition-level |
比赛级别分布 |
| GET | /api/analysis/competition-category |
比赛类别分布 |
| GET | /api/analysis/prep-type |
备考类型分布 |
| GET | /api/analysis/course-category |
课程分类分布 |
| GET | /api/analysis/course-school-top |
开课学校 Top20 |
| POST | /api/auth/login |
登录签发 JWT |
七、免责声明
本项目中的证书、比赛信息为通用公开资料整理,具体报名时间、费用等以各官方机构最新通知为准,仅供学习参考。