在Django管理后台记录活动

37 投票
3 回答
37111 浏览
提问于 2025-04-16 00:40

我需要记录Django后台的活动。

我知道后台会存储一些消息,但我不知道怎么找到这些消息,以便把它们当作简单的日志来用。


我想要跟踪以下内容:

  • 执行操作的用户

  • 执行的操作

  • 操作的时间

谢谢大家。

3 个回答

7

看看这个 LogEntry 类,它用来记录管理员操作的日志。

你可以这样使用它,来在日志中插入自定义的记录:

from settings import LOG_SIZE, LOG_THRESHOLD
from django.contrib.admin.models import LogEntry

if not LogEntry._meta.installed:
        raise ImproperlyConfigured("You'll need to put 'django.contrib.admin' in your INSTALLED_APPS setting before you can use the admin application.")

def log_action(user_id, content_type_id, object_id, object_repr, action_flag, change_message=''):
        # limit log size
        log_count = LogEntry.objects.count()

        if log_count > LOG_THRESHOLD:
                to_delete = LogEntry.objects.all()[LOG_SIZE:log_count]

                #FIXME (!?): to_delete.delete()
                for d in to_delete:
                        d.delete()

        LogEntry.objects.log_action(user_id, content_type_id, object_id, object_repr, action_flag, change_message)
18

日志信息存储在Django使用的数据库中的django_admin_log表里。

36

我之前也遇到过类似的情况,所以我用了下面这样的代码:

from django.contrib.admin.models import LogEntry

logs = LogEntry.objects.all() #or you can filter, etc.
for l in logs:
    #perform action

你可以查看LogEntry的所有属性,不过我觉得你需要关注的属性是 l.user(用户),l.action_time(操作时间),l.obj_repr(对象的名称)和 l.action_flag(操作标记,{ 1:'添加', 2:'修改', 3:'删除'})。希望这些信息对你有帮助!

撰写回答