使用django-simple-history实现简单审计功能
前言
本文依然是中台项目延伸的笔记
这个系列的文章太小众了,看的人都不多
我争取尽快把这系列完结了,然后进入新的项目
关于审计
之前我在 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 里)
使用django-simple-history实现简单审计功能的更多相关文章
- System.DateUtils 1. DateOf、TimeOf 简单修饰功能
编译版本:Delphi XE7 { Simple trimming functions } // 简单修饰功能 function DateOf(const AValue: TDateTime): TD ...
- 基于django的自定义简单session功能
基于django的自定义简单session功能 简单思路: 1.建立自定义session数据库 2.登入时将用户名和密码存入session库 3.将自定义的随机session_id写入cookie中 ...
- Python Django 实现简单注册功能
Python Django 实现简单注册功能 项目创建略,可参考前期文档介绍. 目录结构如下 编辑views.py from django.shortcuts import render # Crea ...
- 利用paramiko模块实现堡垒机+审计功能
paramiko模块是一个远程连接服务器,全真模拟ssh2协议的python模块,借助paramiko源码包中的demos目录下:demo.py和interactive.py两个模块实现简单的堡垒机+ ...
- mysql基于init-connect+binlog完成审计功能
目前社区版本的mysql的审计功能还是比较弱的,基于插件的审计目前存在于Mysql的企业版.Percona和MariaDB上,但是mysql社区版本有提供init-connect选项,基于此我们可以用 ...
- SQL Server审计功能入门:SQL Server审核 (SQL Server Audit)
原文:SQL Server审计功能入门:SQL Server审核 (SQL Server Audit) 介绍 Audit是SQL Server 2008之后才有的功能,它能告诉你"谁什么时候 ...
- SQL Server审计功能入门:CDC(Change Data Capture)
原文:SQL Server审计功能入门:CDC(Change Data Capture) 介绍 SQL Server 2008引入了CDC(Change Data Capture),它能记录: 1. ...
- Django Simple Captcha插件
正文开始 先看官方描述 1.安装 打开控制台,输入如下: pip install django-simple-captcha 2.把APP添加到Django项目进入自己的Django项目,在setti ...
- web 框架的本质及自定义web框架 模板渲染jinja2 mvc 和 mtv框架 Django框架的下载安装 基于Django实现的一个简单示例
Django基础一之web框架的本质 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基于Django实现的一个简单 ...
- mysql 之审计 init-connect+binlog完成审计功能
mysql基于init-connect+binlog完成审计功能 目前社区版本的mysql的审计功能还是比较弱的,基于插件的审计目前存在于Mysql的企业版.Percona和MariaDB上,但是my ...
随机推荐
- 16.1k star! 只需要DDL就能一键生成数据库关系图!开源神器ChartDB让你的数据结构"看得见"
嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 ChartDB是一款开源的数据库可视化神器,通过一句智能查询就能自动生成专业的数据库关系图. ...
- JSP (二) -- JSP与HTML集成开发
目录 脚本 普通脚本 声明脚本 输出脚本 JSP注释 语法规则 JSP指令 page指令 include指令 taglib指令 动作标签 include useBean setProperty get ...
- K8s新手系列之ReplicaSet资源
概述 官网地址:https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/replicaset/ ReplicaSet简称rs,其 ...
- Java 自定义线程池的任务
在<Java 自定义线程池的线程工厂>一文中介绍了如何优雅地自定义线程工厂,本文介绍如何自定义线程池的任务,并拿到返回值. 首先自定义一个任务类,实现Callable接口,重写ca ...
- Spring扩展接口-CommandLineRunner、ApplicationRunner
.markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...
- Pod的调度
在默认情况下,一个Pod在哪个Node节点上运行,是由Scheduler组件采用相应的算法计算出来的,这个过程是不受人工控制的.但是在实际使用中,这并不满足需求,因为很多情况下,我们想控制某些Pod到 ...
- Element-plus组件库的MessageBox 消息弹框组件自定义样式的坑
一.问题描述: 在使用Element-plus组件库的MessageBox 消息弹框组件时,需要更改该组件的按钮样式,于是根据官网文档: 找到cancel-button-class.confirm-b ...
- shell脚本加密软件shc
一.简单介绍 shc是linux的一款加密脚本的插件,将shc放到系统的可执行目录下我们可以直接运行shc命令 二.shc的安装 [root@disk ~]#yum install gcc -y [r ...
- 开源公开课丨大数据调度系统Taier任务调度介绍
一.直播介绍 前几期,我们为大家分享了Taier基本介绍.控制台.Web前端架构及数据开发介绍,本期我们为大家分享Taier任务调度介绍. 本次直播我们将从Taier的任务调度实例生成.调度及提交等方 ...
- pytorch入门 - 基于AlexNet神经网络实现猫狗大战
基于之前的博客 pytorch入门 - AlexNet神经网络,并借助Kaggle 的 Dogs vs Cats Redux 数据集,实现一个基于 AlexNet 的二分类模型识别猫与狗. 完整流程涵 ...