我授课(yanjiayu@bnds.cn)
Douglas授课(douglasdenton@bnds.cn)
放假
调休上课
周末
我的事项
提示:键盘 ← / → 翻页,T 回到本周;添加事项时按 Enter 快速提交,点事项右上角 × 删除。
课程格里的 🎲 分组 按钮可直接带着该班级跳转去随机分组器。
事项保存在本机浏览器(localStorage),换电脑或清理浏览器数据会丢失,重要安排建议另做备份。
随机分组器 Random Grouping · 5 组 · 人数差 ≤ 1
选择班级 → 点击开始 → 观看洗牌与逐个抽签过程 → 得到 5 个随机小组。名单上单击学生可将其标记为「缺席 / 不参与本次分组」。
动画速度
READY
点击「开始随机分组」,先洗牌、再逐个抽签入组
☁️ 云端上传 把本地文件发到自己的服务器 · 带进度、可重试、刷新不丢
现在还没有服务器也能用:未填写接口地址时,文件会先进入本地队列(存在浏览器 IndexedDB 里,关掉页面也不丢),
并可用「模拟上传」先走通流程;等你有了服务器,只需在下面填一个地址即可真正上传。
服务器配置
—
还没有服务器?点开复制一份最小可用后端(Node / Python 二选一)
Node.js(Express + multer):把下面存成 server.js,执行 npm i express multer 后 node server.js,地址填 http://localhost:3000/upload。
const express = require('express');
const multer = require('multer');
const app = express();
const upload = multer({ dest: 'uploads/' });
// 简单的 Token 校验:设了环境变量 TOKEN 才启用
function checkAuth(req, res, next) {
if (!process.env.TOKEN) return next();
const auth = req.headers.authorization || '';
if (auth !== 'Bearer ' + process.env.TOKEN) {
return res.status(401).send('unauthorized');
}
next();
}
app.post('/upload', checkAuth, upload.single('file'), (req, res) => {
console.log('收到文件:', req.file.originalname, req.file.size, 'bytes');
res.json({ ok: true, name: req.file.originalname });
});
app.listen(3000, () => console.log('listening on http://localhost:3000'));
Python(Flask):存成 server.py,执行 pip install flask flask-cors 后 python server.py。
from flask import Flask, request, jsonify
from flask_cors import CORS
from werkzeug.utils import secure_filename
import os
app = Flask(__name__)
CORS(app) # 允许浏览器跨域上传
os.makedirs('uploads', exist_ok=True)
@app.post('/upload')
def upload():
f = request.files.get('file')
if f is None:
return jsonify(error='no file'), 400
path = os.path.join('uploads', secure_filename(f.filename))
f.save(path)
return jsonify(ok=True, name=f.filename, size=os.path.getsize(path))
app.run(port=3000, debug=True)
提示:本机测试时,页面用 file:// 直接打开也能请求 http://localhost,但部分浏览器会拦截;更稳妥的做法是在文件所在目录起一个静态服务(如 npx serve)。
选择文件
支持多选与拖拽
🖼️ 图片预览
点击放大 · 支持 Ctrl+V 粘贴截图
加入队列的图片会即时显示在这里(也支持直接把图片文件拖到本区域)。图片同样保存在本地,刷新页面后仍在。
涉及学生头像、作业照片等内容请在上传前确认隐私与合规要求。
上传队列
—
队列里的文件本体保存在浏览器 IndexedDB 中,刷新页面、重开浏览器都还在;只有在点「清空队列」或「删除」时才会移除。
上传采用逐个顺序发送,单个失败不影响后续,可随时点「重试失败项」。注意:上传学生名单等含个人信息的文件前,请确认服务器为你本人掌控,并符合学校的数据合规要求。