12.2 实战项目全周期复盘


文档摘要

12.2 实战项目全周期复盘 本节摘要:复盘不是总结陈词,而是把墨迹博客从 startproject 到生产维护的完整旅程按时间轴重走一遍,标注每个阶段的真实决策、踩过的坑与背后的取舍逻辑。目标是沉淀一套可迁移的项目节奏——下一个项目开工时,你知道每一步该在什么时机做、做到什么深度停手。 生命周期时间轴 建设期约五周、交付期两周、之后转入维护期的常态循环。比例值得记住:上线只是项目三分之一的进度条,维护期才是长期主战场,而多数新手把九成精力花在前三分之一。 各阶段的决策复盘 骨架期(第 1 章):最大的决策是"不急着写代码",先花一天搞清 MTV 分层——请求进来走中间件、路由分发到视图、视图调度模型与模板。当时觉得慢,后来每次排查问题时都受益:报错定位先问"这属于哪一层"。

12.2 实战项目全周期复盘

本节摘要:复盘不是总结陈词,而是把墨迹博客从 startproject 到生产维护的完整旅程按时间轴重走一遍,标注每个阶段的真实决策、踩过的坑与背后的取舍逻辑。目标是沉淀一套可迁移的项目节奏——下一个项目开工时,你知道每一步该在什么时机做、做到什么深度停手。

生命周期时间轴

建设期约五周、交付期两周、之后转入维护期的常态循环。比例值得记住:上线只是项目三分之一的进度条,维护期才是长期主战场,而多数新手把九成精力花在前三分之一。

各阶段的决策复盘

骨架期(第 1 章):最大的决策是"不急着写代码",先花一天搞清 MTV 分层——请求进来走中间件、路由分发到视图、视图调度模型与模板。当时觉得慢,后来每次排查问题时都受益:报错定位先问"这属于哪一层"。配置拆分开发与生产两份,从第一天就做,避免上线前夜手忙脚乱。

建模期(第 2 章):核心教训是"模型设计的返工成本随时间指数增长"。文章与标签用多对多、评论挂外键到文章——第一次设计漏了软删除字段,上线两个月后产品要"回收站"功能,补迁移时数据回填折腾了一整天。此后养成习惯:建模时多问一句"这块数据一年后会被怎么改"。

查询与视图期(第 3、4 章):N+1 查询是在压测里撞见的——列表页一打开两百多条 SQL。这教会我们:QuerySet 的惰性求值是双刃剑,select_related 与 prefetch_related 要在写视图时同步考虑,而不是等性能崩了再补。中间件那节画的请求链路分层图,后来成了排查"响应头怎么丢的"这类问题的第一张草稿纸。

表单与认证期(第 5、6、7 章):ModelForm 让创建文章页的代码量缩到三分之一;CSRF 中间件默认开启救过一次——上线首周就收到扫描器的试探流量,全部被 403 挡下。认证期的决策是权限颗粒度:先做粗粒度分组(作者组、编辑组),不预设细粒度,等真实需求出现再细化——过度设计的权限树比没有权限更难维护。这一时期最大的认知收获是对"信任边界"的理解:表单校验、CSRF 令牌、权限过滤,本质上都在同一条线上施工——客户端的一切输入都是不可信的,必须在服务端重新验证。这条原则后来被推而广之:第三方接口的回调、队列里取出的任务参数,凡是跨越了进程边界的数据,一律当作不可信输入对待。安全意识一旦从"某个功能"升级为"一种反射",写代码的方式会随之改变。

测试与部署期(第 9、10 章):测试是"欠账利息最高"的一项,越晚写越贵。部署那天最值的决定是 Gunicorn 加 Nginx 的分层:静态文件归 Nginx、动态请求归应用服务器,后来排查慢请求时两层日志对得上时间戳,五分钟定位到一条慢查询。

维护期(第 11、12 章):性能调优按"先测量后优化"的纪律走,压测数据指出热点在首页聚合,一段缓存就解决,避免了盲目改架构。安全加固用检查命令清单化施工,一次过关。

维护期还有一条暗线值得单独点出:代码库的熵在持续增加。三个月里墨迹博客加了七次小功能,视图文件从三百行涨到九百行,部分早期函数已经没人说得清用途。处理方式不是停下来大重构,而是"童子军军规"式的顺路清理——每次改动某段代码时,顺手把它理顺一点、补一条测试、删掉失效分支。累积三个月,第九百行的文件被拆成了两个模块,期间没有任何一次专门的"重构周"。维护期的秩序不是靠运动式突击维持的,是靠每次触碰都留下比来时更干净的一点痕迹。

可迁移的方法论

把十二章的教训压缩成五条节奏,供下一个项目直接套用:

第一,认知先行:开工前把框架的分层模型吃透,磨刀不误砍柴工。第二,模型为重:数据结构是最难改的决策,宁可用一天推演未来一年的演进。第三,随写随测:测试与代码同步生长,别攒到上线前。第四,分层排障:出问题先定位层,再深入层内。第五,维护常态:性能、安全、依赖巡检排进日历,成为例行动作而非救火。

这五条之外,还有一个贯穿始终但从未单独成章的素质,值得在收官处点破:对节奏的掌控。回头看墨迹博客的每一次顺利,都源于"在正确的时机做正确深度的事"——骨架期没有过度设计权限体系,建模期没有跳过推演直接建表,上线前没有因为赶时间跳过测试,维护期没有为了一个慢查询轻率地引入分库分表。反过来看,每一次踩坑,几乎都是节奏失守:要么做早了(为想象中的流量 premature 地堆架构),要么做晚了(该写的测试拖成了欠账)。框架可以换、语言可以换,这种对时机的判断力是比任何具体技术都保值的能力。

如果非要给"什么时候该深化、什么时候该从简"一个通用判据,我会说:看返工成本。返工成本高的决策(模型、架构分层、认证体系选型),值得在早期投入超额的思考;返工成本低的决策(模板结构、函数拆分、变量命名),快速决定、留待演化即可。把这个标尺用在每一次"要不要多花点时间"的犹豫上,你就掌握了整本教程真正想教的东西——不是 Django 的用法,而是一个项目从无到有、从有到稳的全局节奏感。

生命周期会循环:下一个项目开工时,你又回到第一章的 startproject——但这次,你知道整条路长什么样。

本节要点回顾

  • 上线只占项目三分之一,维护期是长期主战场。
  • 模型返工成本最高,建模时多推演一年的数据演进。
  • 测试随写随积,欠账利息逐日复利。
  • 五条节奏可直接迁移:认知先行、模型为重、随写随测、分层排障、维护常态。

全册到此收官。带着这套生命周期节奏,去开始你的下一个 Django 项目吧。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U