使用Django6.1开发博客(2) - 模型与后台
项目骨架能跑以后,我先把博客的数据模型立起来。页面可以晚一点出现,数据边界不能晚。接下来要定义分类、标签和文章三张业务表,打开 Django Admin,再把模型交给测试守住。

图里有四类对象。User 来自 Django 的认证系统,Category 收敛文章的纵向归属,Tag 补充横向主题,Post 是这张图的核心。一篇文章只有一个作者和一个分类,可以挂多个标签;一个标签也会被多篇文章使用。
项目骨架能跑以后,我先把博客的数据模型立起来。页面可以晚一点出现,数据边界不能晚。接下来要定义分类、标签和文章三张业务表,打开 Django Admin,再把模型交给测试守住。

图里有四类对象。User 来自 Django 的认证系统,Category 收敛文章的纵向归属,Tag 补充横向主题,Post 是这张图的核心。一篇文章只有一个作者和一个分类,可以挂多个标签;一个标签也会被多篇文章使用。
背景是这样子的,大概十年前我写了一个使用Django开发博客系列教程,那时候的Django版本还是1.9。十年弹指一挥就过去了,人生又有多少个十年呢?
这次我将使用最新版本 Django 6.1 从零开始重新来开发这个博客,通过循序渐进的方式一步步的构建这个博客系统,一个功能一个功能的往上加。从构建整个博客的过程中来学习Django6.1的使用方式,以及最新的Python WEB开发技术。
你是否也经历过这些令人头疼的“造轮子”时刻:训练好了一个目标检测模型,却还要花半天写代码在图像上画框、标类别、调颜色;想统计视频里的人数或车辆,结果大部分时间都耗在了追踪算法的调试和区域计数逻辑上;换个模型试试效果,之前为标注和数据加载写的那套代码又得全部推倒重来。
客服后台常有这类请求:「ORD-1001 到哪一步了」「客户 C-001 最近买了什么」「这周下了多少单」。对应的查询接口系统里都有,但入口藏在运营后台的几个页面里,客服要在页面之间跳转、记订单号、再拼出答案。说实话,我一开始想的是给客服再做一个问答页面,后来发现大型语言模型宿主(Claude Desktop、Cursor、Claude Code)已经能理解这类自然语言问题,也能在理解之后调用外部函数,缺的只是一个标准协议,把订单系统的查询方法递到模型手里。Model Context Protocol(MCP)就是这个协议。
运营平台的报表需求里有一类固定动作:每天早上把昨天的订单统计图发到工作群。图要有、消息要准时,还要在群里直接能看,转发链接与打开网页都嫌多余。我最后选的做法,是服务端定时把图表渲染成 PNG,交给消息通道发出去。浏览器端 ECharts 画图没问题,但 PNG 要在服务端出,渲染这件事就得由后端想办法。
公司内部的运营后台十有八九长一个样:商品录入、审批列表、参数配置页,页面结构简单,交互以表单提交加刷新列表为主。这种页面用前后端分离去做,我要维护两套代码、一条接口约定,还得排一次联调,投入产出比实在不划算。说实话,把页面拼装放回服务端,一个工程、一套部署就能交付,这类内部工具我一律上 Thymeleaf。Spring 官方对模板技术的推荐位很多年前就给了它:自然的 HTML 原型(直接双击就能打开)、与 Spring MVC 的表单绑定、开箱即用的 Bean Validation 错误回显,都是我需要的东西。