【问题标题】:Using unique user identifier in Django logs在 Django 日志中使用唯一的用户标识符
【发布时间】:2020-07-02 10:43:46
【问题描述】:

在我的网站中,我想添加用户操作的日志记录(例如,用户添加/修改/删除了某些内容,用户访问了某个页面,用户登录/退出)。为了清楚起见,我需要这个标识符是唯一的,但允许我关注用户而不是在每个网站上更改(一切都发生在我的网站内)。

我已经准备好记录器,但我不确定如何获得唯一的用户标识符。目前它看起来像这样:

logger.info('User %s entered website X', self.request.user)

我知道我可以将request.user 用于已登录的用户,但是其余的呢?现在每个人都是AnonymousUser,但我想要一些唯一的标识符。

我假设 Django 已经提供了它,但问题是 - 我如何访问它。

【问题讨论】:

    标签: django


    【解决方案1】:

    对于匿名用户,我会设置自己的会话 ID

    当 SessionMiddleware 被激活时,每个 HttpRequest 对象——任何 Django 视图函数的第一个参数——都会有一个会话属性,它是一个类似字典的对象。

    参考:https://docs.djangoproject.com/en/3.0/topics/http/sessions/#using-sessions-in-views

    import uuid
    
    request.session['anonymous_id'] = uuid.uuid4()
    
    # Then you can do
    logger.info('User %s entered website X', request.session['anonymous_id'])
    

    您决定如何设置此会话属性取决于您,我建议您使用中间件方法检查用户是否已登录。如果没有,请检查是否已经存在会话 ID。如果没有,则设置一个。

    【讨论】:

    • 谢谢!这正是我所需要的。
    猜你喜欢
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    • 2021-10-06
    相关资源
    最近更新 更多