综合验收与对照本站继续学习
学习目标
从全新目录启动最终项目,按业务、权限、运维三类验证交付质量,把练习模块映射到本站源码,独立完成一个扩展功能。
为什么最后还要从零启动一次
逐章开发的目录可能残留旧数据库或手工文件。从课程包生成完整代码,再建立新环境,可以证明文档、迁移和依赖没有隐含前提。这个过程也是交给同事或部署新服务器时的基本能力。
本教程共有 36 章,最终 SQLite 回归测试 20 项;真正部署还要使用 MySQL 回归、浏览器、SMTP、HTTPS 和恢复演练。所谓掌握开发流程,是知道各个结论由什么证据支持,并能说明测试之外的限制。
具体怎么做:从课程包启动最终项目
下载全部文稿和阶段代码,解压后进入 django61。下面命令创建新的空练习目录;已有目录请换名称,不覆盖自己的学习成果。
python tools/materialize.py --chapter 36 --output ../zhixing-complete
cd ../zhixing-complete
python3.14 -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.txt
python manage.py migrate
python manage.py seed_demo
python manage.py createsuperuser
python manage.py test --settings=config.test_settings
python manage.py runserver 127.0.0.1:8000
Windows 的创建和激活虚拟环境命令见第 3 章,其余 Python 命令相同。只安装 requirements.txt 即可运行 SQLite 开发版本;MySQL 和生产镜像分别使用 requirements-mysql.txt、requirements-prod.txt。服务器部署按第 31–34 章执行,不把 runserver 当生产服务。
新增下面的本地验收脚本。它不部署、不改业务数据,只运行检查、测试和媒体审计。
本章新增或替换的完整文件
以下路径均相对于练习项目根目录。替换同名文件的全部内容;未列出的文件保持上一章版本。
deploy/acceptance.sh
#!/usr/bin/env bash
set -euo pipefail
cd "$(dirname "$0")/.."
python manage.py check
python manage.py migrate --check
python manage.py makemigrations --check --dry-run
python manage.py test --settings=config.test_settings
python manage.py audit_media
printf '%s\n' '自动检查通过。继续按第 36 章执行双账号权限、手机布局、SMTP 和恢复演练验收。'
如何确认成功:业务与权限验收
| 场景 | 预期结果 |
|---|---|
| 匿名搜索、筛选、分页 | 状态保留,只有公开文章 |
| 注册弱密码、重复邮箱 | 明确错误,不生成异常账户 |
| 登录外站 next、GET 退出 | 不跳到外站,GET 退出被拒绝 |
| 作者草稿预览 | 作者可读,其他人 404 |
| 他人编辑或删除 | GET/POST 均不能越权 |
| 图片上传、无效文件 | 正常图片可读,无效文件拒绝 |
| 评论后立即再次提交 | 待审核、限制频率 |
| 密码重置链接重复使用 | 第二次失效,旧密码不能登录 |
| JSON 创建文章 | 校验身份和 CSRF,返回 201 |
| 数据库中断 | 健康接口 503,日志不暴露凭据 |
手机测试使用 320、375、390 像素宽度和横屏,确认导航换行、表单可点击、错误提示可见、图片不拉伸、代码块局部滚动。用键盘 Tab 操作登录和发布,不仅依靠鼠标。生产验收还要记录真实收件、证书续期、备份校验和恢复后的文章/媒体抽样。
与本站源码对照
| 学到的能力 | 本站阅读入口 | 关注的问题 |
|---|---|---|
| 配置和应用组织 | config/settings.py、config/urls.py | apps 与 extra_apps 路径如何加载 |
| 文章和视频 | apps/blog/models.py、views.py | 多种内容类型如何查询和显示 |
| 账号生命周期 | apps/user/forms.py、views.py、limits.py | 激活、重置、限流和资料修改 |
| 论坛与评论 | apps/forum/、apps/comment/ | 对象权限、回复树、分页、重复提交 |
| 点选验证码 | apps/verification/ | 验证作用域、会话绑定和一次使用 |
| 教程和学习记录 | apps/course/、templates/course/ | 目录、前后章节、阅读和完成记录 |
| HTML 内容安全 | extra_apps/utils/content.py | 允许哪些标签与属性 |
| 容器与宝塔 | compose.yaml、docker/、deploy/baota/ | 环境加载、持久化和发布差异 |
本站是长期演进的社区系统,包含旧数据兼容和额外运营需求。不要直接把练习项目的模型替换进去;先写清需求、检查数据和回归测试,再设计小步修改。
独立项目练习
选择“收藏文章”“标签筛选”“编辑冲突提示”之一。先写用户场景和验收标准,再设计模型与迁移、权限、页面/接口、测试、发布和回退。提交代码时描述行为变化和验证结果,不只列文件名。
例如收藏需要用户与文章唯一关系;添加和取消必须 POST;用户只能操作自己的收藏;草稿不可被他人通过收藏列表读到。先写这四个失败场景的测试,再实现功能。完成后向另一位初学者解释你的设计,让他从空目录运行成功。
常见问题
还能继续学什么? 根据实际需求选择 DRF、持久化任务队列、Redis、全文搜索和可观测平台,优先解决已有瓶颈。教程是否包含所有生产防护? 没有,当前案例明确保留了账号激活、复杂反刷、私有文件和协作冲突等扩展边界。本站已有相关模块,适合带着问题继续阅读。
官方参考
登录后可保存阅读位置、标记章节完成,并在其他设备继续学习。
登录并保存学习进度 →联系站长
微信:VIPdjango。技术问题建议先在 社区讨论 中交流,方便更多人参与和查阅。
章节讨论 0