Python 现代开发学习笔记

(二十四)按请求与状态定位问题

1. 从响应找到第一处差异

表单 422 先看对应字段提示,以及 values 中保留的原输入。400 的表单验证错误先刷新页面,再检查本次隐藏字段和 Cookie 是否来自同一会话;浏览器前后切换账号时,登录前的旧令牌已经被替换。

页面反复跳登录,先核对 Cookie 有没有随请求发送,再查当前实例目录、签名密钥和 logins 记录。重启后突然变成空书架,继续核对是否换了工作目录或 SHELF_INSTANCE,以及是否登录了另一个账号。

Working outside of application context 表示读取 current_app 或 g 时没有当前应用;命令使用 with app.app_context() 或 with_appcontext。只有应用上下文时读取 request 仍然会报请求上下文错误,应该从实际 HTTP 请求或测试请求上下文进入。

按字段错误表单令牌登录跳转与上下文异常分别检查输入、Cookie、实例路径和调用位置,找到第一处不同后留下可复现请求

2. 对照前两章的职责

同一项工作 第十二章手动组织 FastAPI 项目 Flask 项目
路由与参数 自己匹配和解析 路由声明与参数模型 路由转换器与 request 显式读取
输入检查 校验函数 Pydantic 表单校验函数与数据类
数据库工作资源 请求内连接 请求内 SQLAlchemy Session g 中的请求内连接
身份进入请求 Cookie 会话编号 主动发送 Bearer 头 Flask 签名 Cookie 加服务器登录记录
输出 手动组织 HTML 或 JSON 公开响应模型 Jinja 模板或 jsonify
成功写入 提交后跳转或返回 提交后交回 JSON 提交后 303 再读取页面

Flask 的普通页面视图运行在 WSGI 调用中。这章的同步 SQLite 与模板渲染沿同一次请求完成。把长时间采集或训练直接放入视图,响应就会一直等待;需要异步工作时,再把任务编号、持久状态和独立执行接起来,沿第八章与前一章的任务流程设计。

笔记正文与全部题解 · Ctrl / ⌘ K