使用django-simple-history实现简单审计功能
Django生态真够用,simple-history这种现成工具谁还手写审计?ModelAdmin混入就完事,历史记录自动记录,不过unfold集成倒是省心。别跟我提什么复杂配置,简单点挺好。
目录11 个章节
前言
本文依然是中台项目延伸的笔记
这个系列的文章太小众了,看的人都不多
我争取尽快把这系列完结了,然后进入新的项目
关于审计
之前我在 dotnet 的项目里已经自己实现了审计功能了,还是用切面思想搞的
详见:
Django 生态非常丰富,实现审计应该也有很多方法和现成的库
而且因为强绑定了自己的一套 ORM ,整个生态都围绕这个体系来展开,更加的开箱即用
simple-history
本文使用了的这个 simple-history 可以记录每个 model 的操作
搭配 DjangoStarter 框架使用,目前已经切换到 unfold admin 作为管理后台,可以无缝集成
- https://github.com/django-commons/django-simple-history
- https://unfoldadmin.com/docs/integrations/django-simple-history/
安装(普通Django项目)
这里是普通 Django 项目的步骤
先安装依赖
pdm add django-simple-history
注册应用
INSTALLED_APPS = [
# ...
'simple_history',
]
添加中间件
这个库的审计功能是通过中间件来实现的,当然也可以不用中间件,需要额外的方式折腾。
MIDDLEWARE = [
# ...
'simple_history.middleware.HistoryRequestMiddleware',
]
然后修改 admin 继承 SimpleHistoryAdmin
from simple_history.admin import SimpleHistoryAdmin
@admin.register(Movie)
class MovieAdmin(SimpleHistoryAdmin):
...
这样就可以在后台看到这个 model 的相关操作了
DjangoStarter集成
实际上是 unfold 的集成🤣
注册服务
确保按照以下顺序注册app
INSTALLED_APPS = [
"unfold",
# ...
"unfold.contrib.simple_history",
# ...
"simple_history",
]
修改admin
虽然不修改也能 work
不过就没那么好的集成度和样式
from unfold.admin import ModelAdmin
from simple_history.admin import SimpleHistoryAdmin
@admin.register(Movie)
class MovieAdmin(SimpleHistoryAdmin, ModelAdmin):
...
如何使用
在需要记录操作历史的 model 添加 history = HistoricalRecords() 字段
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()
老规矩,修改了模型需要同步数据库
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 里)
_EOF_
使用django-simple-history实现简单审计功能
- 本文作者:
- 程序设计实验室
- 版权声明:
- 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
相关文章
DeepSeek+Claude强强联手,使用AI驱动DjangoStarter 3.1框架升级
上个月底培训了一周就没时间更新博客 上周有一些空闲时间,就继续体验最近很火的AI辅助编程
2025-03-16 · DjangoStarter · 约 1 分钟
DjangoStarter v3.2.1 更新:框架瘦身以及方向思考
DjangoStarter 成了时间黑洞?一堆无关组件拖累维护成本,果断瘦身砍掉 django-compressor、Prometheus、Grafana,小项目何必搞企业级运维?Less is more,把精力花在刀刃上。
2025-11-26 · DjangoStarter · 约 1 分钟
DjangoStarter v3.3.0 版本更新
DjangoStarter v3.3.0?哦,不过是优化了Docker和换了个Granian服务器。导航栏多了管理后台,还扔了unfold。过渡版本就这?
2025-12-03 · DjangoStarter · 约 1 分钟
在 DjangoStarter 中集成 TailwindCSS
之前看到有个叫 `django-tailwind` 的 python包,不过可能配套的 `tailwind` 版本不方便更新,再加上 **DjangoStarter** 很早就使用 NPM 和 gulp 来管理前端静态资源了,所以还是手动来添加 tailwind 比较好。
2024-07-15 · DjangoStarter · 约 1 分钟
讨论
共 0 条加载评论中…