使用django-simple-history实现简单审计功能

前言

本文依然是中台项目延伸的笔记

这个系列的文章太小众了,看的人都不多

我争取尽快把这系列完结了,然后进入新的项目

关于审计

之前我在 dotnet 的项目里已经自己实现了审计功能了,还是用切面思想搞的

详见:

Django 生态非常丰富,实现审计应该也有很多方法和现成的库

而且因为强绑定了自己的一套 ORM ,整个生态都围绕这个体系来展开,更加的开箱即用

simple-history

本文使用了的这个 simple-history 可以记录每个 model 的操作

搭配 DjangoStarter 框架使用,目前已经切换到 unfold admin 作为管理后台,可以无缝集成

安装(普通Django项目)

这里是普通 Django 项目的步骤

先安装依赖

bash 复制代码
pdm add django-simple-history

注册应用

python 复制代码
INSTALLED_APPS = [
    # ...
    'simple_history',
]

添加中间件

这个库的审计功能是通过中间件来实现的,当然也可以不用中间件,需要额外的方式折腾。

python 复制代码
MIDDLEWARE = [
    # ...
    'simple_history.middleware.HistoryRequestMiddleware',
]

然后修改 admin 继承 SimpleHistoryAdmin

python 复制代码
from simple_history.admin import SimpleHistoryAdmin

@admin.register(Movie)
class MovieAdmin(SimpleHistoryAdmin):
    ...

这样就可以在后台看到这个 model 的相关操作了

DjangoStarter集成

实际上是 unfold 的集成🤣

注册服务

确保按照以下顺序注册app

python 复制代码
INSTALLED_APPS = [
    "unfold",
    # ...
    "unfold.contrib.simple_history",
    # ...
    "simple_history",
]

修改admin

虽然不修改也能 work

不过就没那么好的集成度和样式

python 复制代码
from unfold.admin import ModelAdmin
from simple_history.admin import SimpleHistoryAdmin

@admin.register(Movie)
class MovieAdmin(SimpleHistoryAdmin, ModelAdmin):
    ...

如何使用

在需要记录操作历史的 model 添加 history = HistoricalRecords() 字段

python 复制代码
class Movie(ModelExt):
    title = models.CharField(max_length=100)
    description = models.TextField()
    year = models.IntegerField()
    rating = models.IntegerField()
    genre = models.CharField(max_length=100)
    director = models.CharField(max_length=100)
    actors = models.CharField(max_length=100)
    history = HistoricalRecords()

老规矩,修改了模型需要同步数据库

bash 复制代码
python src/manage.py makemigrations
python src/manage.py migrate

记得 admin 也要同步修改,方法在前面介绍过了

这时候进入 admin 管理界面,点击某一个具体数据,右上角就有个"历史"按钮,点进去可以看到所有操作记录了

实现效果

查看到操作历史类似下面这样

可以看到修改人和修改了哪些内容

记录对象 日期/时间 备注 修改人 修改原因 Changes
演员1 2025年7月19日 23:56 已修改 admin None City: Tokyo ➡️ Tokyo Sega
演员1 2025年7月19日 23:56 已创建 admin None

小结

这个库还有很多可以自定义的地方,文档也写得很详细了

我就没必要搬运了(其实是我用到的功能就这么简单)

unfold 还有很多集成的第三方库,感觉都不错(迟早要集成到 DjangoStarter 里)

相关推荐
vx_biyesheji00019 小时前
Python 全国城市租房洞察系统 Django框架 Requests爬虫 可视化 房子 房源 大数据 大模型 计算机毕业设计源码(建议收藏)✅
爬虫·python·机器学习·django·flask·课程设计·旅游
vx_biyesheji000117 小时前
计算机毕业设计:Python多源新闻数据智能舆情挖掘平台 Flask框架 爬虫 SnowNLP ARIMA 可视化 数据分析 大数据(建议收藏)✅
爬虫·python·机器学习·数据分析·django·flask·课程设计
Mr数据杨18 小时前
【Dv3Admin】Django一键配置权限规则
python·django·sqlite
小陈工19 小时前
2026年3月22日技术资讯洞察:数据库优化进入预测时代,网络安全威胁全面升级
java·开发语言·数据库·python·安全·web安全·django
vx_biyesheji000121 小时前
计算机毕业设计:Python全栈图书数据挖掘与可视化看板 Django框架 爬虫 当当图书 Pandas 可视化 大数据 大模型 书籍(建议收藏)✅
爬虫·python·机器学习·数据挖掘·django·毕业设计·课程设计
B站_计算机毕业设计之家1 天前
计算机毕业设计:Python当当网图书数据全链路处理平台 Django框架 爬虫 Pandas 可视化 大数据 大模型 书籍(建议收藏)✅
爬虫·python·机器学习·django·flask·pandas·课程设计
q_35488851532 天前
计算机毕业设计:Python当当网图书大数据分析平台 Django框架 爬虫 Pandas 可视化 大数据 大模型 书籍(建议收藏)✅
大数据·爬虫·python·机器学习·数据分析·django·课程设计
q_35488851532 天前
计算机毕业设计源码:Python动漫智能推荐与可视化分析系统 Django框架 协同过滤推荐算法 可视化 数据分析 大数据 大模型(建议收藏)✅
python·scrapy·数据分析·django·课程设计·旅游·推荐算法
B站计算机毕业设计之家2 天前
Python 基于协同过滤的动漫推荐与数据分析平台 Django框架 协同过滤推荐算法 可视化 数据分析 大数据 大模型 计算机毕业设计(建议收藏)✅
大数据·python·scrapy·数据分析·django·课程设计·推荐算法
B站计算机毕业设计之家2 天前
计算机毕业设计源码:Python图书数据智能采集与可视化大屏 当当网 Django框架 爬虫 Pandas 可视化 大数据 大模型 书籍(建议收藏)✅
爬虫·python·机器学习·信息可视化·django·pandas·课程设计