作业提交系统
xiaoyuScholaris 作业提交系统
这是一个基于 Cloudflare Pages + Pages Functions 的班级作业提交与管理系统。前端页面位于 public/,后端接口位于 functions/api/。
主要功能
- 学生端:登录、修改密码、提交作业、查看个人提交历史、撤回本人上传文件、使用 AI 助手。
- 管理端:登录后台、管理科目、查看/预览/下载/删除提交文件、维护学生库、设置截止时间、公告、AI 规则、审计日志、评分与评语。
- 文件存储:使用 Cloudflare R2 保存作业文件和部分 JSON 数据。
- 学生数据:使用 Cloudflare D1 保存学生档案、学生密码、命名规则等数据。
- AI 能力:支持 OpenAI 兼容接口,例如 SiliconFlow。
目录结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| public/ index.html 学生端主页 login.html 学生/管理员统一登录页 admin.html 管理后台页面 assets/ 页面拆分后的 CSS 和 JS tailwind.js 本地 Tailwind runtime
functions/api/ upload.js 学生上传作业 delete.js 学生撤回文件 history.js 学生提交历史 folders.js 科目列表、截止时间、复杂科目 submitted.js 已提交信息与重名检查 notice.js 公告 ai.js AI 助手入口 admin/ 管理端登录、鉴权、核心接口 student/ 学生登录、鉴权、改密、个人信息 *-store.js R2 JSON 数据读写模块 student-db.js D1 学生库、密码、命名规则
|
本地调试
- 安装 Node.js。
- 在项目根目录打开终端。
- 复制示例环境变量:
1
| Copy-Item .dev.vars.example .dev.vars
|
- 编辑
.dev.vars,至少填写这些变量:
1 2 3 4 5
| ADMIN_SESSION_SECRET=一段足够长的随机字符串 DELETE_TOKEN_SECRET=一段足够长的随机字符串 STUDENT_SESSION_SECRET=一段足够长的随机字符串 ADMIN_USERS={"admin":"123456"} ALLOWED_EXTENSIONS=.pdf,.doc,.docx,.jpg,.jpeg,.png,.zip
|
- 启动本地 Pages Functions:
1
| npx wrangler pages dev public --r2 R2_BUCKET --d1 DB
|
- 浏览器访问:
1 2 3
| http://127.0.0.1:8788/login http://127.0.0.1:8788/ http://127.0.0.1:8788/admin
|
Cloudflare 绑定名
代码里固定使用以下绑定名,本地和线上都要保持一致:
1 2
| R2_BUCKET Cloudflare R2 存储桶 DB Cloudflare D1 数据库
|
如果要使用 wrangler.toml,可以复制示例:
1
| Copy-Item wrangler.toml.example wrangler.toml
|
然后把 bucket_name、database_name、database_id 改成自己的 Cloudflare 资源。
线上部署注意事项
.dev.vars 只用于本地,不要上传给别人,也不要提交到仓库。
- Cloudflare Pages 后台需要配置同名环境变量和绑定。
- D1 绑定变量名必须是
DB。
- R2 绑定变量名必须是
R2_BUCKET。
- 管理员账号通过
ADMIN_USERS 配置,格式是 JSON 对象。
- 学生首次默认密码通常是
123456,首次登录后会提示修改密码。
- 如果启用 AI,需要配置:
1 2 3 4 5
| OPENAI_API_KEY AI_BASE_URL AI_LIGHT_MODEL AI_HEAVY_MODEL AI_TIMEOUT_MS
|
SiliconFlow 这类 OpenAI 兼容服务可以这样填:
1 2 3
| AI_BASE_URL=https://api.siliconflow.cn/v1 AI_LIGHT_MODEL=Qwen/Qwen2.5-7B-Instruct AI_HEAVY_MODEL=Qwen/Qwen2.5-7B-Instruct
|