用 Django 4.2 搭建个人技术站的实战笔记
用 Django 4.2 搭建个人技术站的实战笔记
把个人技术站从零搭起来不难,难的是让它稳定、可维护、可迁移。本文记录用 Django 4.2 重建站点时沉淀的几点工程经验,大多与部署和运维相关,供同样在折腾的朋友参考。
1. 配置与环境分离:一份代码,多份环境
早期把 SECRET_KEY、DEBUG、数据库密码直接写死在 settings.py 里,结果本地调试和线上部署频繁串味。正确做法是把所有环境相关的值抽到环境变量:
import os
SECRET_KEY = os.environ.get("DJANGO_SECRET_KEY", "dev-insecure")
DEBUG = os.environ.get("DJANGO_DEBUG", "False") == "True"
DATABASES = {
"default": {
"ENGINE": "django.db.backends.mysql",
"NAME": os.environ.get("DB_NAME", "weiserv"),
"USER": os.environ.get("DB_USER", "root"),
"PASSWORD": os.environ.get("DB_PASSWORD", ""),
"HOST": os.environ.get("DB_HOST", "127.0.0.1"),
"PORT": os.environ.get("DB_PORT", "3306"),
}
}
本地开发用 python-dotenv 读取 .env,生产环境由 uWSGI 的 env = 指令注入,一套代码在两种环境间互不干扰。
2. 写操作后务必清缓存
站点用 cache_page 做了整页缓存,新文章发布后列表页和详情页一时不刷新,排查半天才定位到是缓存未失效。发布脚本里加一行 cache.clear() 即可让全站缓存失效、重新生成:
from django.core.cache import cache
cache.clear()
注意这会把缓存整体清空,流量高峰期慎用;更细粒度可用 cache.delete_pattern 只清博客相关键。
3. slug 幂等:发一次与发一百次结果一致
如果发文接口按标题自动生成 slug,重复运行会产生 xxx-2、xxx-3 这类重复地址,既丑又影响 SEO。稳健做法是使用稳定 slug 先做查重,存在就跳过创建:
existing = Post.objects.filter(slug=slug).first()
if existing:
# 已存在,跳过,保证幂等
return
Post.objects.create(slug=slug, ...)
这样脚本无论跑多少次,线上状态都一致,也方便通过定时任务反复同步内容。
小结
Django「约定优于配置」对个人站非常友好,真正值得花心思的反而是部署、缓存、配置这些工程细节。把环境隔离、缓存失效和幂等写入发布流程,个人站就能做到「改完即发、发了即稳」。更多细节后续再逐步补充。
广告位占位 · post-inline