第12组 · 曾大君 · 第1次评审详情 - sebestp/coursewise GitHub Wiki

曾大君 · 第1次评审详情(第12组 · 组员)

基本信息

  • 报告期次:第1次 | 报告日期:2026-10-08 | 项目组号:第12组 | 项目名称:在线购物系统

工作任务与成果物

  • 已完成工作:上传05模块四个源码文件与统一启动入口,六组集成测试通过
  • 成果物:提交与源码

成果物 · 提交与源码

卖家账号与系统集成成果

负责人:曾大君;GitHub账号:Sisyphu-s。负责05模块的卖家账号、共享数据库、统一HTTP服务入口与系统集成测试。

提交与源码

四个源码文件已合入 main(提交 cbc14b3,作者 Sisyphu-s)。此前页面把提交来源记为 PR #1,经 GitHub API 查询该编号在本仓库不存在(/pulls/1 返回 404),已按可核验的提交号更正。

当前模块源码 · 当前仓库源码下载

文件 职责
database.py 数据表初始化、数据库连接与事务、约束及公开商品字段输出
security.py 固定卖家账号登录、退出、密码修改及会话验证
server.py 统一HTTP入口、前端静态文件、JSON请求校验与各业务模块路由挂载
test_system.py 使用独立临时数据库进行系统集成测试

代码已上传,系统运行与测试结果待验证;源码上传不等于功能验收通过。本页补充模块说明,不宣称个人任务或系统已100%验收完成。

数据库与关键函数
函数 作用
connection(write=False) 创建SQLite连接,启用外键;写事务使用 BEGIN IMMEDIATE,成功提交、异常回滚并关闭连接
initialize(password_hash) 创建数据库目录、启用WAL、初始化表和固定卖家账号;已有账号不会被重复初始化覆盖
public_product(row) 按白名单输出商品公开字段,空记录返回 None,不暴露选中意向编号

数据表包括 seller、sessions、products、intents 和 trade_events。唯一索引限制同时最多一件 active 或 frozen 商品;UNIQUE(product_id, contact) 限制同商品同规范化电话重复提交意向。02、03、04模块通过共享连接执行各自业务SQL。

账号与会话
  • 固定单一卖家账号,无用户注册。
  • hash_password() 使用随机盐及PBKDF2-HMAC-SHA256(260000次迭代)存储密码哈希;verify_password() 使用恒定时间比较校验哈希。
  • 登录生成随机会话令牌,数据库保存令牌的SHA256哈希和过期时间;会话有效期8小时。
  • Cookie设置 HttpOnly、SameSite=Strict 和 Path=/;logged_in() 检查会话,require_seller() 对未登录请求返回401。
  • 退出删除当前会话并清除Cookie。修改密码验证原密码,新密码为8–128字符且不能与旧密码相同;成功后删除全部会话并要求重新登录。
方法 路径 登录要求 功能
GET /api/account 无需登录 返回 logged_in/username
POST /api/login 无需登录 校验 username/password,创建会话并设置Cookie
POST /api/logout 会话可选 删除当前会话并清除Cookie
POST /api/password 需卖家登录 校验 old_password/new_password,修改密码并使旧会话失效
系统集成与请求处理

server.py 把02、03、04模块目录加入导入路径,合并 buyer.ROUTES、products.ROUTES、trades.ROUTES 和 security.ROUTES。前端静态文件从 01_前端界面 读取,前后端由同源服务提供。

  • Handler.text() 校验文本类型和长度;Handler.integer() 校验正整数。
  • Handler.dispatch() 分发API和静态文件,处理错误并返回JSON错误信息。
  • POST要求 Content-Type: application/json、X-Requested-With: ShopApp;存在Origin时检查同源,JSON须为对象,请求体上限3MB。
  • Handler.respond() 输出响应及内容类型、缓存控制和安全响应头。
  • main() 初始化数据库并启动HTTP服务,默认监听 127.0.0.1:8000。

教师点评

(评审后填写)

⚠️ **GitHub.com Fallback** ⚠️