DjangoBlog - 我的Django博客系统开发历程
写在前面 ✨·
这个博客系统已经陪伴我走过了近十年的时光。从最初使用WordPress,到决定用Django重写,再到现在拥有完整的插件系统、深色模式、多语言支持等现代化特性,每一次迭代都记录着我的成长和思考。
在线地址: https://www.lylinux.net 开源地址: https://github.com/liangliangyy/DjangoBlog
为什么要自己写博客系统? 🤔
最开始我和大多数人一样,使用的是WordPress。WordPress功能强大,插件丰富,但随着使用的深入,我发现了一些问题:
- PHP环境在我的VPS上部署比较麻烦
- WordPress对于简单的需求来说有些"重"
- 想要深度定制总是受限于主题和插件
- 作为Python开发者,总想着"自己动手,丰衣足食"
于是,DjangoBlog诞生了。从2016年的第一个版本到现在,它已经成为一个功能完善的博客系统。
核心功能特性 ⚡
📝 写作体验
使用Markdown写作,支持代码高亮。在Mac上写好文章,直接复制到后台发布,简单高效。文章支持分类和标签,还有全文搜索功能,最近还加入了搜索结果高亮显示。
💬 评论互动
完整的评论系统,支持Markdown格式。当有人评论或回复时,会自动发送邮件通知。还支持评论审核功能,可以过滤垃圾评论。
最特别的是支持第三方账号登录,目前已接入Google、GitHub、Facebook和微博,用户可以直接使用这些账号登录评论,头像也会自动获取。
🎨 界面设计
界面设计参考了之前使用的WordPress主题,但做了现代化改进:
- 完美适配PC和移动端
- 支持深色模式,自动记住你的选择
- 侧边栏展示最新文章、热门文章和标签云
- 响应式设计,在各种设备上都有良好体验
⚡ 性能优化
- 使用Redis缓存,访问速度快
- 图片上传时自动压缩,节省带宽
- CSS和JavaScript自动压缩混淆
- 优化了首屏加载速度
🚀 部署与运维
提供完整的Docker部署方案,还支持Kubernetes。配置好CI/CD流程后,push代码就能自动部署。出现异常时会自动发送邮件提醒,让我可以及时发现问题。
版本演进历程 📅
🎯 最新版本 v2.1.0.0 (2026年1月)
这是2026年的第一个版本,距离2.0版本发布仅一个月,但带来了许多重要改进。主要变更包含50多个PR,涉及前端重构、性能优化和安全加固。
🔍 搜索系统重构
搜索功能得到了全面升级。现在搜索结果会高亮显示关键词,并且对HTML内容进行纯文本提取后再高亮,避免了HTML标签干扰。搜索界面也经过重新设计,加入了快捷入口图标,头部布局更加现代化。此外,Elasticsearch升级到8.6.1版本,搜索性能和准确度都有提升。
🌙 深色模式完善
2.0版本引入了基础的深色模式,但存在切换闪烁的问题。2.1版本对此进行了彻底重构:
- 实现了主题切换的持久化存储,记住用户选择
- 增加了系统主题跟随功能,可自动切换
- 优化了CSS加载顺序,彻底解决切换时的闪烁问题
- 调整了深色模式下的颜色对比度,阅读体验更佳
💎 前端现代化改造
引入了Vite作为前端构建工具,替换了老旧的django-compressor。这带来了几个好处:
- 开发时热模块替换(HMR),提升开发效率
- 更智能的代码分割和懒加载
- 优化了字体加载策略,使用font-display: swap减少首屏渲染阻塞
- 精简了静态资源,删除了IE兼容代码和无用的字体文件
⚡ 性能优化
基于实际运行数据进行了针对性优化:
- 优化首屏渲染,关键CSS内联,非关键资源延迟加载
- 添加了缓存一致性检查配置,可根据需要关闭以提升性能
- 优化了数据库查询,为常用查询添加复合索引
- 静态资源压缩率提升30%
🔒 安全加固
通过GitHub CodeQL扫描发现并修复了多个安全问题:
- 修复了使用MD5等弱加密哈希算法的问题
- 修复了URL重定向漏洞,防止开放重定向攻击
- 增强了XSS防护,对用户输入进行更严格的过滤
🏗️ 架构改进
引入了基础视图类(base_views.py),统一了视图层的安全策略和缓存策略。这让代码更加DRY(Don't Repeat Yourself),也更容易维护。
📈 SEO优化
更新了meta标签生成逻辑,为文章、分类、标签和作者页面提供更精确的元数据,改进了搜索引擎抓取效果。
📱 移动端体验
重新设计了移动端导航菜单,优化了响应式布局,小屏幕设备的浏览体验显著提升。
🤖 AI辅助开发
这个版本还有一个有趣的里程碑:GitHub Copilot作为"贡献者"首次出现在项目中,参与了Docker工作流优化和CI/CD改进,AI辅助开发正在成为现实。
📦 依赖更新
通过Dependabot自动更新了大量依赖包,包括:
- Django保持最新的5.2.x版本
- Markdown库从3.5升级到3.10
- Bleach升级到6.3.0,增强XSS防护
- Pygments升级到2.19.2,支持更多语言高亮
🏆 v2.0.0.0 (2025年12月) - 里程碑版本
这是一个重大版本更新,历时近两年开发,合并了100多个PR,涉及架构重构、功能扩展和技术栈升级。这个版本基本上重写了大部分核心代码,是项目发展的重要分水岭。
🔧 Django 5.0 + Python 3.9
完成了技术栈的重大升级:
- Django从4.2升级到5.0,拥抱最新特性和性能改进
- Python最低版本提升到3.9,使用类型提示和新语法特性
- 数据库迁移系统重构,支持更灵活的Schema变更
- 异步视图支持,部分IO密集操作改为异步处理
🔌 插件系统架构
这是2.0版本最重要的创新。设计了一套完整的插件系统,让功能扩展变得优雅:
# 插件基类提供统一接口
class BasePlugin:
SUPPORTED_POSITIONS = [] # 插件显示位置
DEFAULT_PRIORITY = 100 # 优先级
def render_position_widget(self, position, context):
# 插件渲染逻辑
pass
插件系统的特性:
- 零侵入:插件独立于核心代码,放在plugins目录即可
- 位置系统:定义了sidebar、article_bottom等多个插件位置
- 优先级控制:插件可以指定渲染优先级
- 钩子机制:插件可以注册到Django信号系统
- 模板自动发现:插件可以有自己的模板和静态文件
目前已实现的内置插件:
- 文章推荐插件:基于标签相似度推荐相关文章
- 热门文章插件:展示阅读量最高的文章
- 标签云插件:可视化展示所有标签
📁 目录结构重组
为了支持插件系统和更好的代码组织,对项目结构进行了重构:
djangoblog/
├── blog/ # 核心博客应用
├── accounts/ # 用户账号系统
├── comments/ # 评论系统
├── servermanager/ # VPS管理
├── oauth/ # OAuth登录
├── djangoblog/ # 项目配置
│ ├── plugin_manage/ # 插件管理器
│ ├── base_views.py # 基础视图
│ └── settings.py
└── plugins/ # 插件目录
├── article_recommend/
├── hot_articles/
└── tag_cloud/
🌙 深色模式首发
实现了完整的深色主题支持:
- 在数据库中添加了color_scheme字段存储用户偏好
- CSS变量系统,方便主题切换
- 自动适配用户系统主题设置
- 所有页面和组件都适配深色模式
🌍 多语言国际化
引入了Django的i18n框架:
- 使用gettext提取可翻译字符串
- 提供中英文翻译文件
- 时区感知的日期时间处理
- URL国际化支持
虽然目前主要还是中文用户,但为未来的国际化打下了基础。
🤖 ChatGPT智能辅助
在servermanager模块集成了OpenAI API:
- 用于智能回复微信公众号消息
- 辅助生成文章摘要
- 代码优化建议
这是对AI技术的一次探索性尝试。
☸️ 云原生部署
提供了完整的Kubernetes部署方案:
deploy/k8s/
├── configmap.yaml # 配置文件
├── deployment.yaml # 部署配置
├── service.yaml # 服务配置
└── ingress.yaml # 入口配置
支持:
- 滚动更新和回滚
- 水平扩展
- 健康检查
- 配置热更新
Docker镜像也进行了优化,使用多阶段构建,最终镜像大小减少40%。
✅ 评论审核系统
新增了灵活的评论审核机制:
- 全局开关控制是否需要审核
- 管理后台可批量审核评论
- 评论审核后自动发送邮件通知
- 防垃圾评论算法
💾 数据库优化
添加了多个复合索引,常见查询性能提升50%:
- (status, pub_time) 用于文章列表查询
- (status, views) 用于热门文章查询
- (article, parent, enable_comment) 用于评论树查询
🧪 测试覆盖率大幅提升
新增了大量测试用例:
- accounts模块测试覆盖率达到85%
- blog模块测试覆盖率达到78%
- comments模块完整测试
- 总体测试覆盖率从40%提升到78%
🔒 安全性增强
- 修复XSS漏洞,使用bleach清理HTML
- 增强SQL注入防护
- 敏感配置迁移到环境变量
- 定期安全审计流程
🚀 CI/CD完善
- GitHub Actions工作流优化
- 自动部署到生产环境
- 代码质量检查集成
- Dependabot自动依赖更新
从1.0.0.7到2.0.0.0,代码变更超过1万行,是项目历史上最大的一次更新。
v1.0.x系列 (2021-2023)
从v1.0.0.1到v1.0.0.7,这段时间主要是稳定性改进:
- 完善了基础的博客功能
- 优化了OAuth登录流程
- 改进了缓存机制
- 增强了SEO功能
- 修复了各种bug
早期版本 (2016-2021)
v5.0 (2018年1月): 升级到Django 2.0,增加Facebook登录,修改用户评论默认头像为OAuth获取的头像。
v4.0 (2017年9月): 集成微信公众号功能,可以用微信公众号管理VPS。
v3.0 (2017年6月): 优化OAuth功能,评论支持Markdown,上传图片自动压缩。
v2.4 (2017年4月): 支持微博登录,添加标签云,非本站链接自动添加nofollow。
v2.3 (2017年3月): OAuth登录功能上线,支持Google和GitHub。
v2.2 (2017年2月): 添加JS/CSS压缩混淆功能,集成Travis自动测试。
v2.1 (2017年2月): 修复评论bug,添加ping_baidu命令,增加评论邮件通知。
v2.0 (2017年1月): 基本功能完善,优化sitemap和feeds,修改代码高亮和Markdown解析。
v1.1 (2017年1月): 添加搜索功能,加入Memcache缓存,修复若干bug。
v1.0 (2016年12月): 第一个版本发布,实现基础博客功能。
技术选型思考 💭
为什么选择Django?
Django的"batteries included"哲学很适合快速开发博客系统。ORM、Admin、表单、认证等功能都是内置的,让我可以专注于业务逻辑。而且Python生态丰富,需要什么功能基本都能找到对应的库。
为什么不用静态博客生成器?
Hexo、Hugo这类静态博客很快,但缺少动态功能。评论、搜索、用户登录这些功能实现起来很麻烦。我需要一个有后台管理的动态博客系统。
相比WordPress的优势?
- 更轻量,资源占用更少
- 代码可控,想改哪里改哪里
- 对Python开发者更友好
- 部署更灵活,Docker、K8s都支持
当然WordPress的插件生态是它的优势,但对我来说,能够完全掌控系统更重要。
开源与分享 🌟
从第一天起,DjangoBlog就是开源的。截至目前,项目已经收获了不少Star和Fork,也有很多朋友提交了PR。
如果你也想搭建自己的博客,或者想学习Django开发,欢迎访问项目地址:
https://github.com/liangliangyy/DjangoBlog
项目采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议,可以自由使用和修改,但不能用于商业目的。
未来规划 🚀
虽然已经是一个相对完善的系统,但还有很多可以改进的地方:
- 继续优化插件系统,让插件开发更简单
- 改进移动端体验,考虑做一个渐进式Web应用(PWA)
- 增加更多的主题支持
- 考虑支持Markdown扩展语法
- 改进搜索功能,可能会引入Elasticsearch
感谢支持 ☕
如果这个项目对你有帮助,可以考虑请我喝杯咖啡,你的支持是我持续维护的动力。
支付宝:
微信支付:
写在最后 💬
从WordPress到DjangoBlog,从简单的博客到现在的功能完善的系统,这个项目承载了我这些年在Web开发上的思考和实践。
博客不仅是一个展示平台,更是一个学习和成长的记录。每一次版本更新,每一个功能改进,都是对技术的探索和对用户体验的追求。
如果你正在考虑搭建自己的博客,或者对Django开发感兴趣,希望DjangoBlog能给你一些启发。欢迎Star、Fork,也欢迎提Issue和PR。
让我们一起,用代码记录生活,用技术连接世界。
项目地址: https://github.com/liangliangyy/DjangoBlog
博客地址: https://www.lylinux.net
问题反馈: https://github.com/liangliangyy/DjangoBlog/issues
如果觉得不错,请给个⭐Star支持一下!
Made with ❤️ by liangliangyy
本文由 liangliangyy 原创,转载请注明出处。
test
你这网站可以商用吗?我准备开发部署博客的商业业务,是否有法律上的风险。
这个网站在github上是mit协议,理论上可以商用,我部署一个博客收费1000元,然后给你捐100元可以吗?
你好,可以商用的。另外欢迎你捐赠。
niu
fwef
aaaa