logo
0
0
WeChat Login
docs: 更新README文档和数据库设计说明

基于 Golang + Python 的在线 Word 排版

技术栈

Golang + React + SQLite + Python3

  • Glang 使用 Gin + GROM + SQLite 提供 WEB 服务
  • SQLite 实现管理员信息以及签发的临时 token 存储
  • Python3 使用 re + docx 实现对文档的解析排版

实现方案

  • Gin 提供 Web 服务
  • 支持管理员登录(系统只有管理员一个用户)
  • 管理员分发 token
  • 用户使用 token 上传文件处理

业务流程

系统初始化
  • 初始化管理员用户名密码
    • 用户名采用环境变量 ACC_USER_ID
    • 密码为随机生成的 8 位 大小写字母+数字 字符
    • 密码使用 bcrypt 加密存储
    • 首次启动时打印初始密码到日志
管理员生成 token
  • token 为 UUID
  • token 有效期:永久有效,直到被管理员禁用或使用后失效
普通用户使用 token 处理文档
  • 输入 token
  • 校验 token 是否有效
    • token 未绑定:绑定到当前用户的 cookie,返回 Set-Cookie
    • token 已绑定:校验当前 cookie 与绑定的 cookie 是否一致
      • 一致:返回当前处理状态和处理结果(如有),可继续后续操作
      • 不一致:响应"token 已被使用"
    • 绑定后 10 分钟内未上传文件则自动释放,token 恢复可用
  • 后续请求自动携带 cookie,后端通过 cookie 校验用户身份
  • 上传文件(token 进入使用中状态,不再受 10 分钟限制,上传结束重新开始倒计时)
    • 文件保存到 ./files/{token}/1.{扩展名}(如 ./files/abc123/1.docx
    • 记录原始文件名和存储路径
  • 提交处理(token 进入使用中状态,不再受 10 分钟限制)
  • go 调用 python 处理文件
    • 交叉引用 python3 word-ref.py
    • 处理后文件保存到 ./files/{token}/1.result.{扩展名}(如 ./files/abc123/1.result.docx
  • SSE 推送处理进度
  • 下载处理后的文件(处理过程中及完成后均可访问)
    • 下载文件名:{原始文件名}_已处理-{token}.{扩展名} (如:报告.docx报告_已处理-abc123).docx
  • 文件处理完成后 token 标记为已使用,不可再次使用
  • 响应文件给前端

API

管理员

  • POST /api/admin/login 登录
  • POST /api/admin/tokens 生成 token
  • GET /api/admin/tokens 查看 token 列表
  • PUT /api/admin/tokens/{id}/status 更新 token 状态(禁用/启用)

用户

  • POST /api/tokens/verify 验证 token
    • 未绑定:绑定并返回 Set-Cookie
    • 已绑定且 cookie 一致:返回处理状态/结果
    • 已绑定且 cookie 不一致:响应"已被使用"
  • POST /api/files/upload 上传文件(通过 Cookie 自动认证)
  • POST /api/files/process 处理文件(通过 Cookie 自动认证,token 进入使用中状态)
  • GET /api/files/status 获取处理状态/SSE 推送处理进度(通过 Cookie 自动认证)
    • 返回处理状态、原始文件名、处理进度等信息
    • 支持 SSE 实时推送处理进度
  • GET /api/files/download 下载处理后的文件(通过 Cookie 自动认证)
    • 响应 Content-Disposition: attachment; filename="{原始文件名}_已处理-{token}.{扩展名}"

数据库设计

管理员表 (admins)

字段类型说明
idINTEGER主键,自增
usernameVARCHAR(64)用户名,唯一
passwordVARCHAR(128)密码,bcrypt 加密
created_atDATETIME创建时间
updated_atDATETIME更新时间

Token 表 (tokens)

字段类型说明
idINTEGER主键,自增
tokenVARCHAR(36)UUID,唯一
statusVARCHAR(16)状态:available/bound/processing/used/disabled
bound_cookieVARCHAR(128)绑定的 cookie 标识
bind_expires_atDATETIME绑定过期时间(10 分钟)
original_filenameVARCHAR(256)原始文件名
source_file_pathVARCHAR(512)源文件存储路径
result_file_pathVARCHAR(512)处理后文件路径
created_atDATETIME创建时间
updated_atDATETIME更新时间
used_atDATETIME使用完成时间
Token 状态说明
状态说明
available可用,未被绑定
bound已绑定,等待上传文件(10 分钟超时)
processing处理中,文件正在格式化
used已使用,处理完成
disabled已禁用,管理员手动禁用

页面

  • 管理员
    • 登录
    • 生成 token(支持复制)
    • 支持查看 token 使用情况
  • 普通用户
    • 输入 token 验证
    • 上传文件+查看文件结果

安全性考虑

  • 所有 API 使用 HTTPS
  • 文件上传限制:仅允许 .docx/.doc 格式,最大 100MB
  • Cookie 安全配置:HttpOnly + Secure + SameSite=Strict
  • token 绑定时校验 cookie 一致性,防止多用户抢占
  • token 绑定后 10 分钟内未上传文件则自动释放
  • token 开始处理后保持有效,直到处理完成
  • token 使用后永久失效(一次性使用)
  • 敏感操作(生成 token、禁用 token)需管理员权限

other

# 导出 python 项目依赖 pip3 freeze > requirements.txt