Skip to content

Repository files navigation

题目记录网站

一个本地运行的 Python Flask 题库工具,支持:

  • 自增序号记录题目
  • 题干、ABCD 选项、解析、答案、标签
  • 题干和解析上传图片
  • 录入时 Markdown 与 LaTeX 实时预览
  • 查看今天记录的所有题目
  • 今日题目支持删除
  • 历史页按天归档
  • 一键把今天的题目导出为可交互选择题 Anki .apkg 包,牌组名为 xx月xx日

运行

cd /Users/terry/Documents/Codex/2026-07-09/bang/outputs/question_bank_app
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python app.py

打开:

http://127.0.0.1:5000

数据位置

  • 未配置云服务时,数据库为 data/questions.sqlite3,上传图片位于 uploads/
  • 配置 DATABASE_URL 后,题目保存在 PostgreSQL(推荐 Neon)
  • 配置 BLOB_STORE_ID(新版 OIDC)或 BLOB_READ_WRITE_TOKEN 后,新上传图片保存在 Vercel Blob
  • 导出的 Anki 包只在服务器临时生成,交给浏览器下载后立即删除,不写入数据库或 Blob

部署到 Vercel

在 Vercel 项目的 Storage 页面连接 Neon PostgreSQL 和 Blob,并确认项目环境变量中存在:

DATABASE_URL
BLOB_STORE_ID

当前项目使用 Private Blob。应用会通过受控路由显示题目图片,并在导出 Anki 时鉴权读取图片,不会把 Blob 凭证暴露给浏览器。新版 Blob 默认使用 Vercel OIDC 短期凭证,不需要长期的 BLOB_READ_WRITE_TOKEN。应用检测到这些变量后会自动使用云端持久存储。本地未配置变量时仍使用 SQLite,方便离线开发。

首次迁移本地数据

首次部署后,应用会在第一个请求中把仓库自带的 SQLite 题目和对应图片迁移到云端。迁移带有数据库标记且使用 PostgreSQL advisory lock,同一份初始数据只会处理一次,多实例同时启动也不会重复插入。

如果凭证允许在本地读取,也可以手动运行迁移:

vercel link
vercel env pull .env.local
python scripts/migrate_to_cloud.py

迁移默认不会覆盖云端已有的同 ID 题目。确实需要以本地数据覆盖云端同 ID 记录时,使用:

python scripts/migrate_to_cloud.py --replace-existing

不要把 .env.local 或任何 Token 提交到 Git。Production/Preview 的 Sensitive 凭证通常只能在 Vercel 部署运行时使用,这种情况下直接依赖上述自动迁移即可。

说明

导出 Anki 时,会把今天的每一道题制作成一张选择题卡片:正面可点击 A/B/C/D 并即时显示对错,背面是答案、解析和标签。图片会随 .apkg 一起打包。

About

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages