使用django

使用django

一言准备中...

使用django

前言

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

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

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

关于审计

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

详见:

  • AspNetCore开发笔记:实现动态审计日志功能
  • AspNetCore开发笔记:进一步实现非侵入性审计日志功能

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-celery-beat

  • django-money

  • django-constance

  • django-import-export

  • django-simple-history

  • django-guardian

  • django-modeltranslation

  • django-location-field



  • 本文作者:WAP站长网
  • 本文链接: https://wapzz.net/post-26897.html
  • 版权声明:本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。
本站部分内容来源于网络转载,仅供学习交流使用。如涉及版权问题,请及时联系我们,我们将第一时间处理。
文章很赞!支持一下吧 还没有人为TA充电
为TA充电
还没有人为TA充电
0
  • 支付宝打赏
    支付宝扫一扫
  • 微信打赏
    微信扫一扫
感谢支持
文章很赞!支持一下吧
关于作者
2.7W+
8
1
1
WAP站长官方

Note

上一篇

手把手搭建 Astro + Github Pages + Github Actions

下一篇
评论区
内容为空

这一切,似未曾拥有

  • 复制图片
按住ctrl可打开默认菜单