Home avatar

分享Python/Java/Go/Rust编程技术,AI创作爱好者

使用Django6.1开发博客(8) - 后台统计

文章后台已有管理入口,但管理员每天关心的几个数字还得点进列表慢慢数。我把基础统计放进文章列表页上方,显示文章总数、发布数、草稿数、浏览总量和平均浏览量。

https://static.xiongneng.me/admin-stats-component-20260926000000.png

数据仍然从数据库实时聚合。博客规模不大,这样做最诚实。等访问量上来,再把统计结果放进缓存或定时汇总表。

使用Django6.1开发博客(7) - 分页与站点设置

列表、分类、标签和归档都会随着文章增多变长。我给它们加同一套分页,并把每页数量放进 Django Admin。编辑改一个数字,所有文章列表一起生效。

https://static.xiongneng.me/pagination-dataflow-20260926000000.png

请求进入视图后,文章集合先按业务规则过滤,再交给 Paginator。页大小来自 SiteSetting,页码来自 URL 的 page 参数。模板只接收 page_obj,不用关心当前视图是列表、分类还是归档。

使用Django6.1开发博客(6) - 评论与互动

博客能被人读,也需要能被人回应。我先加上匿名评论、顶和踩、热门文章。互动功能第一次把不可信输入带进数据库,验证和转义因此比表单本身更重要。

https://static.xiongneng.me/interaction-sequence-20260926000000.png

评论请求先经过表单验证,再绑定到已发布文章;投票请求先找到文章和浏览器会话,再检查是否已经投过。两者都只在验证通过后写库。

使用Django6.1开发博客(5) - 分类标签与归档

文章多了以后,列表页会变成一条长队。读者想找的内容通常很具体,可能看某个分类,可能记得写作月份,也可能只记得一个标签。我先把这三条找文章的路补上,同时给每一页加上侧边栏。

https://static.xiongneng.me/taxonomy-class-diagram-20260926000000.png

分类、标签、归档分别回答三个问题。分类说文章主要属于哪里,标签说文章还涉及什么,归档说文章出现在哪个时间。三者不互相替代。

使用Django6.1开发博客(4) - Markdown与代码高亮

上一篇文章的详情页能打开,但正文只是几行普通段落。技术博客离不开 fenced code、表格和标题层级,纯文本很快就会不够用。我接着把 Markdown 渲染接进详情页,并让代码块得到 Pygments 高亮。

https://static.xiongneng.me/markdown-component-pipeline-20260926000000.png

整条链路很短。作者在后台保存 Markdown,数据库只保存原始文本;详情页请求到达时,模板过滤器把它渲染成 HTML;CodeHilite 给代码块加上类名;页面加载预生成的 Pygments CSS,浏览器完成着色。

使用Django6.1开发博客(3) - 页面与详情

模型稳住以后,博客该见人了。我先接通文章列表和详情页,顺手处理两个很容易拖到上线后的问题。草稿不能因为一个判断写漏就跑到前台;浏览量也不能在并发访问里被旧值覆盖。

https://static.xiongneng.me/blog-request-sequence-20260926000000.png

一个读者请求先经过根路由,再进入 blog 应用的路由,最后到达视图。视图只取已发布文章,交给模板渲染。详情页还会多一步浏览量更新。