千家信息网

Django记录操作日志与LogEntry的使用方法是什么

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要介绍"Django记录操作日志与LogEntry的使用方法是什么"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"Django记录操作日志与LogEn
千家信息网最后更新 2026年10月31日Django记录操作日志与LogEntry的使用方法是什么

这篇文章主要介绍"Django记录操作日志与LogEntry的使用方法是什么"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"Django记录操作日志与LogEntry的使用方法是什么"文章能帮助大家解决问题。

1. 使用LogEntry

ModelAdmin本身就有日志记录功能。当新建一个实体(Post、Category、Tag)时,ModelAdmin会创建一条变更日志记录。当修改一条内容时,ModelAdmin又会调用LogEntry来创建一条日志,记录这个变更。

ModelAdmin内部提供了两个方法,分别是log_addition和log_change。

log_addition记录新增日志。

log_change记录变更日志。

我们可以看它们的定义来学习LogEntry模块

代码位置:django/admin/contrib/options.py

def log_addition(self, request, object, message):        """        Log that an object has been successfully added.        The default implementation creates an admin LogEntry object.        """        from django.contrib.admin.models import LogEntry, ADDITION        return LogEntry.objects.log_action(            user_id=request.user.pk,            content_type_id=get_content_type_for_model(object).pk,            object_id=object.pk,            object_repr=str(object),            action_flag=ADDITION,            change_message=message,        )    def log_change(self, request, object, message):        """        Log that an object has been successfully changed.        The default implementation creates an admin LogEntry object.        """        from django.contrib.admin.models import LogEntry, CHANGE        return LogEntry.objects.log_action(            user_id=request.user.pk,            content_type_id=get_content_type_for_model(object).pk,            object_id=object.pk,            object_repr=str(object),            action_flag=CHANGE,            change_message=message,        )

从以上代码可以看出:这两个方法都调用了LogEntry.objects.log_action方法,只是参数略有不同,可以看到,如果需要自定义变更记录的话,只需要传递对应的参数即可。以下简要介绍一下这些参数。

user_ id

当前用户id。

content_type_id

要保存内容的类型,上面的代码中使用的是get_.content_type_for_model方法拿到对应Model的类型id。这可以简单理解为ContentType为每个Model定义了一个类型id。

object_id

记录变更实例的id,比如PostAdmin中它就是post. id。

object_repr

实例的展示名称,可以简单理解为我们定义的__str__所返回的内容。

action flag

操作标记。admin的Model里面定义了几种基础的标记: ADDITION、CHANGE和DELETION。它用来标记当前参数是数据变更、新增,还是删除。

change_ message

这是记录的消息,可以自行定义。我们可以把新添加的内容放进去(必要时可以通过这里来恢复),也可以把新旧内容的区别放进去。

理解了这几个参数,如果遇到类似的需求,就能直接使用Django现成的工具来完成了。

2. 查询某个对象的变更

上面我们知道如何记录某个对象的变更日志了,那么问题来了,如何在询已经记录的变更呢?

其实这是简单的Model查询问题。假设我们记录的对象是Post的操作,现在来获取Post中id为1的所有变更日志,大概代码如下:

from django.contrib.admin.models import LogEntry, CHANGEfrom django.contrib.admin.options import get_content_type_for_modelpost = Post.objects.get(id=1)log_entries = LogEntry.objects.filter(    content_type_id=get_content_type_for_model(post).pk,    object_id=post.id,

这样我们就拿到了文章id为1的所有变更记录了。

3. 在admin页面上查看操作日志

我们既知道如何记录变更日志,也知道如何获取变更日志,那么如何才能够在admin后台方便地查看操作日志呢?

新增如下配置:

#最上面增加importfrom django.contrib.admin.models import LogEntry#文件最下方增加@adnin.register(LogEntry, site=custom_site)class LogEntryAdmin(admin.ModelAdmin):    list_display = ['object_repr','object_ id','action_flag','user','change_message']

如果你配置过xadmin,则在adminx.py进行配置:

#最上面增加importfrom django.contrib.admin.models import LogEntry#文件最下方增加xadmin.site.register(LogEntry,LogEntryAdmin)class LogEntryAdmin(object):    list_display = ['object_repr','object_id','action_flag','user','change_message']

这样就可以看到所有的变更记录了。如下图所示:

关于"Django记录操作日志与LogEntry的使用方法是什么"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。

日志 方法 内容 参数 代码 使用方法 对象 标记 知识 类型 问题 配置 不同 两个 实例 文件 文章 行业 这是 放进 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 什么是科技互联网 有格互联网科技 互联网佳科技有限公司 互联网科技行业发展 互联网为科技 互联网科技的发展 科技服务与互联网 互联网前沿科技 互联网金融和金融科技 须眉科技是互联网公司吗 宁波青枫互联网科技有限公司 新兴科技互联网创新大赛颁奖典礼 互联网科技大奖都有哪些公司 黑科技 体验场景 互联网大会 互联网科技快讯热点 互联网时代高科技布局 科技互联网专业工作会议发言稿 互联网科技创新创业项目 上海旺乐尼互联网科技有限公司 如何强化互联网金融科技 云之行互联网科技 远信互联网科技 苏州互联网科技贷款公司 广西互联网科技公司 中盈科技互联网信息有限公司 北京华百购互联网科技有限公司 长沙茂晟互联网科技有限公司 工业互联网展湾科技股份有限公司 互联网金融科技公司的优势 平安好医生打造互联网科技医疗
0