我正在尝试找到在我的 Django 项目中审核某些模型的最佳方法。提供一些上下文:该网站有帐户、项目和用户。其中任何一个都可以标记为活动或非活动。当项目的活动状态发生变化时,我想记录更改它的工作人员的日期和用户名。
我已经研究了解决这个审计问题的几种方法,但我希望 StackOverflow 社区可以为我指出一些更好的解决方案。Django 内置的管理界面历史有一个很好的格式,但还不够详细。它只告诉我一个项目已更改,但不告诉我它设置为什么状态:
如果我可以更改 Action 消息并仅记录某些字段的操作(而排除其他字段),我会喜欢使用 Django 的内置历史记录。
我下一次解决这个审计问题的尝试是研究插件。Django Reversion 似乎是最受欢迎的,但我不需要它的大部分功能,而且它确实面向版本控制而不是审计。我还发现了一个名为 AuditTrail 的插件,但它非常原始。
在尝试了这些可能性之后,我尝试推出自己的审计代码。我创建了一个新模型来记录活动。每次激活/停用帐户、项目或用户时都会写入一个条目。
class ActivityHistory(models.Model):
"""
Stores the history of when accounts, projects, and users are active.
This class uses generic relations in order to point to any model type.
For more information see: https://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/#generic-relations
"""
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')
active = models.BooleanField(help_text="The target state (true if the item was activated, false if it was deactivated).")
date = models.DateTimeField(help_text="The time at which the active state was changed.")
actor = models.ForeignKey(User, help_text="The staff member who changed the active state of the account, project, or user in question.")
class Meta:
ordering = ['-date']
问题是我必须使用信号记录信息。在信号处理程序中,我无权访问 HTTPrequest
对象。那么如何记录哪个工作人员更改了有问题的项目呢?
这个问题还有其他更容易实施的解决方案吗?