使用Django6.1开发博客(14) - 部署与收尾
功能已经比较完整,最后把项目放进真实运行环境。部署要收口开发阶段的假设。DEBUG 要关掉,密钥要交给环境,静态文件要有出口,进程要有健康检查。

公共请求先到 Nginx,TLS 和静态文件在这里结束;动态请求进入 Gunicorn,再交给 Django。应用数据、附件对象和缓存分开存放,任何一块出问题都不会把所有状态混在一起。
功能已经比较完整,最后把项目放进真实运行环境。部署要收口开发阶段的假设。DEBUG 要关掉,密钥要交给环境,静态文件要有出口,进程要有健康检查。

公共请求先到 Nginx,TLS 和静态文件在这里结束;动态请求进入 Gunicorn,再交给 Django。应用数据、附件对象和缓存分开存放,任何一块出问题都不会把所有状态混在一起。
博客界面已有中文文案,但语言仍写死在模板里。我把界面文案交给 Django 翻译机制,加入 LocaleMiddleware、语言目录和切换表单。读者选择 English 后,导航、列表分页和空状态会一起变化。

请求先经过 LocaleMiddleware,它会读取 django_language Cookie 或 Accept-Language,解析出当前语言。模板再从翻译目录里取对应文案。
侧边栏在每一页都会查分类、最新文章、热门文章、最新评论和归档。这些数据不要求毫秒级新鲜,很适合缓存。我把侧边栏结果缓存一分钟;本地开发使用 LocMemCache,配置 REDIS_URL 后自动切到 Redis。

视图先查缓存;命中就直接渲染;未命中执行数据库查询,写回缓存。
博客经常需要给文章配图。我加入图片附件模型,并把图片写入阿里云 OSS。五个配置全部来自环境变量,密钥不写进代码。

上传链路是 Django 收文件,ImageField 校验图片,自定义 Storage 调用 OSS SDK,数据库只保存对象键。
文章多起来以后,导航只能帮人缩小范围,搜索才能直接找答案。我给首页加一个搜索框,检索标题、摘要和正文,并让搜索词跟着分页链接继续传递。

搜索词进入视图后先清理空格,再构造 OR 条件。只要标题、摘要或正文命中,文章就进入结果集。