django管理日志记录(日志审计django_admin_log)
环境
django 4.1
用途
django_admin_log 表主要用于以下几个方面:
审计日志: 可以用来记录管理界面的所有操作,以便审计管理员的操作。
故障排除: 可以用来诊断和排除管理界面相关的问题。
数据恢复: 可以用来恢复意外删除的数据。
from django.contrib import admin
# Register your models here.
@admin.register(admin.models.LogEntry)
class LogEntryAdmin(admin.ModelAdmin):
"""
该类用于显示 admin 内置的 django_admin_log 表。
其中,content_type 是指用户修改的 Model 名
"""
list_display = ['action_time', 'user', 'content_type', '__str__']
list_display_links = ['action_time']
list_filter = ['action_time', 'content_type', 'user']
list_per_page = 15
readonly_fields = ['action_time', 'user', 'content_type',
'object_id', 'object_repr', 'action_flag', 'change_message']
注意
django_admin_log 表可能会包含大量的数据,因此需要定期清理。您可以使用 django.contrib.admin.utils.purge_deleted_admin_logs() 函数来清理过期的日志记录。
扩展
在 Django 中,LogEntry 是一个用于记录管理界面操作的模型。它对应于 django_admin_log 表中的记录。
LogEntry 模型包含以下字段:
id: 自增主键
action_time: 操作时间
user: 执行操作的用户
content_type: 操作对象的类型
object_id: 操作对象的 ID
object_repr: 操作对象的表示形式
changes: 操作的详细信息
LogEntry 模型的主要用途包括:
审计日志: 可以用来记录管理界面的所有操作,以便审计管理员的操作。
故障排除: 可以用来诊断和排除管理界面相关的问题。
数据恢复: 可以用来恢复意外删除的数据。
以下是一些使用 LogEntry 模型的示例:
获取所有日志记录:
from django.contrib.admin.models import LogEntry
all_logs = LogEntry.objects.all()
获取特定用户的日志记录:
from django.contrib.admin.models import LogEntry
user_logs = LogEntry.objects.filter(user=request.user)
获取特定对象的日志记录:
from django.contrib.admin.models import LogEntry
from myapp.models import MyModel
mymodel_logs = LogEntry.objects.filter(content_type=ContentType.objects.get_for_model(MyModel), object_id=mymodel_instance.id)
获取特定操作类型的日志记录:
from django.contrib.admin.models import LogEntry
add_logs = LogEntry.objects.filter(object_repr__contains="Added")
参考:
主动显示 Django Admin 的日志表 django_admin_log