logo
0
0
WeChat Login
init: 打字练习系统全栈项目

打字练习系统

一个基于 Web 的全栈打字练习应用,支持自由练习、限时挑战、竞赛模式等多种练习方式,提供详细的成绩统计和历史记录,并配有完整的后台管理系统。

功能特性

练习模式

  • 自由练习:选择范文进行无时间限制的练习
  • 限时挑战:在规定时间内完成打字测试
  • 竞赛模式:实时排名竞赛,支持中英文范文
  • 成绩统计:WPM(每分钟单词数)、CPM(每分钟字符数)、准确率、错字数等详细指标
  • 历史记录:个人练习记录查看与统计图表

用户系统

  • 账号注册/登录:邮箱密码注册,JWT 认证
  • 游客模式:无需注册即可体验,数据临时保存
  • 个人设置:字号调节、严格模式、深色模式

管理员后台

  • 仪表盘:系统数据概览(用户数、练习次数、平均成绩等)
  • 用户管理:用户列表、权限管理
  • 范文管理:中英文范文的增删改查,支持难度分级
  • 排行榜管理:周榜数据维护
  • 记录导出:练习记录查看与导出
  • 通知管理:系统通知发送与管理
  • 系统设置:功能开关(游客竞赛权限、注册开关)、前台显示设置

技术栈

层级技术
前端Vue 3 + TypeScript + Vite + Tailwind CSS + Pinia + Chart.js
后端Python + FastAPI + SQLAlchemy 2.0 (Async) + aiosqlite
认证JWT + bcrypt
部署Docker + Docker Compose

项目结构

typing/ ├── backend/ # 后端服务 │ ├── app/ │ │ ├── main.py # FastAPI 应用入口 │ │ ├── database.py # 数据库连接 │ │ ├── models.py # SQLAlchemy 数据模型 │ │ ├── schemas.py # Pydantic 数据校验 │ │ ├── auth.py # JWT 认证逻辑 │ │ ├── init_db.py # 数据库初始化(含默认数据) │ │ └── routers/ # API 路由模块 │ │ ├── auth.py │ │ ├── texts.py │ │ ├── practice.py │ │ ├── leaderboard.py │ │ ├── admin.py │ │ ├── notifications.py │ │ └── config.py │ ├── tests/ # 测试用例 │ ├── Dockerfile │ └── requirements.txt ├── frontend/ # 前端应用 │ ├── src/ │ │ ├── views/ # 页面视图 │ │ ├── stores/ # Pinia 状态管理 │ │ ├── router/ # Vue Router 配置 │ │ ├── utils/ # 工具函数 │ │ └── types/ # TypeScript 类型定义 │ ├── index.html │ ├── vite.config.ts │ ├── tailwind.config.js │ ├── tsconfig.json │ └── Dockerfile ├── docker-compose.yml └── README.md

快速开始

本地开发

1. 启动后端

cd backend pip install -r requirements.txt uvicorn app.main:app --reload --port 8000

后端默认运行在 http://127.0.0.1:8000

2. 启动前端

cd frontend npm install npm run dev

前端默认运行在 http://localhost:5173

3. 访问应用

打开浏览器访问前端地址,即可开始使用。

默认账号

启动服务后会自动初始化默认数据:

角色邮箱密码
管理员admin@typing.comw123456

Docker 部署

docker-compose up --build

部署完成后访问 http://localhost

API 文档

后端启动后,可访问自动生成的 API 文档:

  • Swagger UI: http://127.0.0.1:8000/docs
  • ReDoc: http://127.0.0.1:8000/redoc

测试

cd backend pytest tests/