前后端一体的轻量儿童储蓄记账系统:家长扮演「银行」——审批存取、管理奖惩、发布家务任务;孩子存钱、定目标、看流水。柔和卡通风格,适配手机浏览器,支持 PWA(可添加到主屏幕,类似手机 APP)。
技术栈:Python + Flask + SQLite(后端)、原生 HTML/CSS/JS(前端,无框架)、Docker 一键部署。
- 家长管理账号:家长登录后可直接创建孩子/家长账号(注册功能关闭时也可用),并可绑定/解绑孩子
- 家务任务 + 奖惩:
- 家长发布家务任务 → 孩子完成 → 家长审核后发放零花钱
- 孩子也可申请任务 → 家长审核通过 → 孩子完成 → 家长确认发放
- 奖惩模板:可维护「奖励/惩罚」项目,每个项目设定每次价格与 emoji 图标(点选);用模板建任务时名称/金额可留空,自动采用模板内容;惩罚可直接对孩子账户扣款
- 储蓄目标:孩子建立目标(金额/截止日),查看进度条;存钱可关联目标,达标自动标记「已达成」
- 资金流水:所有存钱 / 取钱 / 消费 / 奖励 / 惩罚 / 利息都形成流水记录
- 家长扮演银行,存取钱需确认:孩子存钱 / 取钱 / 消费都先提交申请,家长在「审核」页确认后才入账 / 扣款;任务奖励在家长确认发放后入账
- 利息:活期 + 定期双轨利息
- 活期:按余额阶梯年利率分段计息(如 ≥0→1%、≥100→2%),每日自动结算
- 定期:可把活期转存定期(锁定 N 天),存期越长利率越高(时间阶梯),到期自动还本付息
- 均可手动结算/提前手动结算到期定期
- PWA:离线可用、可安装到手机桌面,类 APP 体验
- 柔和卡通 UI,手机浏览器自适应
镜像已发布到 Docker Hub(pyss56/saving:latest),直接拉取即可:
docker run -d \
--name savings-bank \
-p 8000:8000 \
-v savings-data:/app/data \
--restart unless-stopped \
pyss56/saving:latest
# 访问 http://localhost:8000或用 docker compose(同样直接使用线上镜像,无需构建):
docker compose up -d
# 访问 http://localhost:8000- 数据持久化在命名卷
savings-data(SQLite 数据库位于容器内/app/data/savings.db),删除容器后数据不丢失。 --restart unless-stopped:开机 / 崩溃自动重启。
# 1. 安装依赖
pip install -r requirements.txt
# 2. 启动(首次自动建库并初始化一个家长账号)
python app.py
# 3. 访问 http://localhost:8000首次启动只初始化一个家长账号(无演示儿童),账号密码可用环境变量覆盖:
| 环境变量 | 默认值 | 说明 |
|---|---|---|
INIT_USERNAME |
parent |
初始家长用户名 |
INIT_PASSWORD |
123456 |
初始家长密码 |
⚠️ 首次登录后请立即修改密码(右上角「修改密码」)。家长登录后可在「绑定孩子」页直接创建孩子/家长账号(注册功能关闭时也可用),或绑定已自行注册的孩子。
| 变量 | 默认值 | 说明 |
|---|---|---|
PORT |
8000 |
服务端口 |
DATA_DIR |
./data |
数据目录 |
DB_PATH |
{DATA_DIR}/savings.db |
SQLite 数据库路径 |
TZ |
Asia/Shanghai |
全局时区(IANA 名称,如 Asia/Shanghai);未配置默认东八区 |
INIT_USERNAME |
parent |
初始家长用户名 |
INIT_PASSWORD |
123456 |
初始家长密码(首次登录后请修改) |
SEED_DEMO |
空 | 设为 1 时写入 parent1/child1/child2 演示数据(测试用) |
ALLOW_REGISTER |
空 | 设为 1 时允许家长/儿童自行注册(未配置默认关闭) |
- 改掉默认密码:首次启动只初始化一个家长账号(默认
parent/123456,可用环境变量INIT_USERNAME/INIT_PASSWORD覆盖)。首次登录后请立即修改密码(右上角「修改密码」,改后其它设备登录会失效)。 - 数据都在数据库里:账号、余额、任务、流水全部保存在 SQLite 数据库;Docker 方式运行时位于卷
savings-data(容器内/app/data/savings.db)。 - 备份 = 备份数据库:直接备份
savings.db文件(或备份savings-data卷)。恢复时把备份文件放回原位置并重启容器即可。 - 别直接暴露公网:系统内置的是局域网轻量 Bearer token 认证,适合家庭/内网使用;如需远程访问,建议走内网穿透或带认证的反向代理(如 Nginx + Basic Auth),不要裸奔到公网。