前言

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

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

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

关于审计

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

详见:

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

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

simple-history

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

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

安装(普通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实现简单审计功能的更多相关文章

  1. System.DateUtils 1. DateOf、TimeOf 简单修饰功能

    编译版本:Delphi XE7 { Simple trimming functions } // 简单修饰功能 function DateOf(const AValue: TDateTime): TD ...

  2. 基于django的自定义简单session功能

    基于django的自定义简单session功能 简单思路: 1.建立自定义session数据库 2.登入时将用户名和密码存入session库 3.将自定义的随机session_id写入cookie中 ...

  3. Python Django 实现简单注册功能

    Python Django 实现简单注册功能 项目创建略,可参考前期文档介绍. 目录结构如下 编辑views.py from django.shortcuts import render # Crea ...

  4. 利用paramiko模块实现堡垒机+审计功能

    paramiko模块是一个远程连接服务器,全真模拟ssh2协议的python模块,借助paramiko源码包中的demos目录下:demo.py和interactive.py两个模块实现简单的堡垒机+ ...

  5. mysql基于init-connect+binlog完成审计功能

    目前社区版本的mysql的审计功能还是比较弱的,基于插件的审计目前存在于Mysql的企业版.Percona和MariaDB上,但是mysql社区版本有提供init-connect选项,基于此我们可以用 ...

  6. SQL Server审计功能入门:SQL Server审核 (SQL Server Audit)

    原文:SQL Server审计功能入门:SQL Server审核 (SQL Server Audit) 介绍 Audit是SQL Server 2008之后才有的功能,它能告诉你"谁什么时候 ...

  7. SQL Server审计功能入门:CDC(Change Data Capture)

    原文:SQL Server审计功能入门:CDC(Change Data Capture) 介绍 SQL Server 2008引入了CDC(Change Data Capture),它能记录: 1. ...

  8. Django Simple Captcha插件

    正文开始 先看官方描述 1.安装 打开控制台,输入如下: pip install django-simple-captcha 2.把APP添加到Django项目进入自己的Django项目,在setti ...

  9. web 框架的本质及自定义web框架 模板渲染jinja2 mvc 和 mtv框架 Django框架的下载安装 基于Django实现的一个简单示例

    Django基础一之web框架的本质 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基于Django实现的一个简单 ...

  10. mysql 之审计 init-connect+binlog完成审计功能

    mysql基于init-connect+binlog完成审计功能 目前社区版本的mysql的审计功能还是比较弱的,基于插件的审计目前存在于Mysql的企业版.Percona和MariaDB上,但是my ...

随机推荐

  1. 11.7K Star!这个分布式爬虫管理平台让多语言协作如此简单!

    嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 分布式爬虫管理平台Crawlab,支持任何编程语言和框架的爬虫管理,提供可视化界面.任务调度 ...

  2. 【BUG】vite build、Flask运行后报错Failed to load module script. Strict MIME type checking is enforced

    解决方案来源于Stack Overflow. 翻译来源于javascript - Python Flask - 错误 : "Failed to load module script. Str ...

  3. 『Plotly实战指南』--在科学数据可视化中的应用(上)

    在科学研究中,数据可视化是连接实验与理论的关键桥梁. 它不仅能够清晰地呈现实验规律,还能验证假设并支持科研决策. Plotly作为一款强大的可视化工具,凭借其交互性.动态图表支持和灵活的可定制性,在科 ...

  4. 解决MySQL 8.0 设置简单密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy require...

    MySQL8.0下设置简单密码出现错误提示:ERROR 1819 (HY000): Your password does not satisfy the current policy requirem ...

  5. CAP 关键细节点与ACID、BASE的比较

    极客时间:<从 0 开始学架构>:想成为架构师,你必须掌握的CAP细节 1.CAP 关键细节点 埃里克·布鲁尔(Eric Brewer)在<CAP 理论十二年回顾:"规则& ...

  6. 卡掉hash的方法

    大质数hash 通常,这个质数会选择在 \(10^9\) 附近,如 \(998244353\),\(10^9+7\). 考虑生日碰撞,欲达到 50% 成功率,需要尝试的次数为 \[\begin{ali ...

  7. java实现linux文件的解压缩(确保md5sum一致)

    package com.xlkh.device.utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java. ...

  8. linux服务器常用硬件查询操作

    查看服务器内存条数 [root@test ~]# dmidecode |grep -P -A5 "Memory\s+Device" |grep Size |grep -v Rang ...

  9. PI Errors and possible solutions

    引自:https://wiki.scn.sap.com/wiki/display/ERPHCM/PI+Errors+and+possible+solutions 转至元数据起始   404 - Not ...

  10. 使用 xUnit 快速编写 .NET 应用单元测试

    前言 在当今快速迭代的软件开发环境中,单元测试已成为保障代码质量和项目可靠性的重要基石,通过验证程序最小单元(如函数.方法.类等)的独立行为,能够在开发阶段快速发现逻辑错误或边界条件问题.今天大姚将带 ...