获取Django用户名来记录信号

时间:2016-12-19 15:16:07

标签: django logging signals username

我正在尝试登录Django。我想记录用户保存或修改数据的每个场合。在我的信号处理程序代码中,我有类似的东西:

@receiver(post_save)
def post_save_callback(sender, instance, created, raw, using, update_fields, **kwargs):
logger.info(
    'Post-save called for %s. Created? %r. update_fields: %s',
    sender, created, json.dumps(update_fields)
)

我还想记录执行数据操作的用户的用户名,基本上是当前登录的用户。我怎样才能获得此用户名?

2 个答案:

答案 0 :(得分:1)

如文档here中所述,当许多代码可能对同一事件感兴趣时,信号非常有用。

是这样的吗?

如果在管理面板中执行数据操作,您可以考虑覆盖log_change对象的ModelAdmin方法,并且可以使用request.user.username来获取当前登录用户的用户名。< / p>

def log_change(self, request, object, message):
    logger.info('User %s changed user data %s. %s' % 
                (request.user.username, object, message)
    super(MyClass, self).log_change(request, object, message)

请记住,ModelAdmin已在管理日志,文档here

中记录更改

答案 1 :(得分:1)

无法完成。当前用户仅可通过使用post_save时无法使用的请求获得。 要实现您的目标,您可以执行以下任一操作:

  1. 您可以覆盖该模型上的 save()方法
  2. 您可以使用中间件来存储当前用户(请参阅此snippet,可以自动将用户created_by和modified_by外键引用添加到任何模型)