基于信号的脱敏审计日志系统
使用Django内置信号和自定义信号,自动记录数据变更但自动脱敏敏感字段。 · 难度:入门 · +10XP
信号驱动的智能审计日志
多数审计日志教程只记录CRUD操作,但本教程教你利用post_save、post_delete信号结合自定义信号,实现字段级脱敏记录。例如:当用户模型保存时,自动记录'email'字段为'***@***.com'格式,而'username'完整记录。同时通过自定义信号(如payment_completed)记录业务事件,而非仅仅数据变动。你将编写信号处理器和独立的AuditLog模型。
from django.db.models.signals import post_save
from django.dispatch import receiver
from .models import User, AuditLog
def mask_sensitive_value(field_name, value):
if field_name == 'email':
return value[:1] + '***@***' + value[-4:]
return value
@receiver(post_save, sender=User)
def log_user_save(sender, instance, **kwargs):
changed_fields = []
for field in instance._meta.fields:
old_val = getattr(instance, field.attname, None)
new_val = mask_sensitive_value(field.name, old_val)
changed_fields.append((field.name, new_val))
AuditLog.objects.create(model='User', action='save', details=changed_fields)