在 Flask 中跟踪用户活动的实现

Posted

技术标签:

【中文标题】在 Flask 中跟踪用户活动的实现【英文标题】:Implementation For Keeping Track of User Activity in Flask 【发布时间】:2021-10-28 06:01:10 【问题描述】:

我正在尝试以我可以创建每个用户创建的用户的方式创建模型。到目前为止,我有一个用户模型:

class User(db.Model):

    __tablename__ = "usersTable"
    
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(128), nullable=False)
    password = db.Column(db.String(255), nullable=False)
    active = db.Column(db.Boolean(), default=True, nullable=False)
    created_date = db.Column(db.DateTime, default=func.now(), nullable=False)

这是我创建的用户函数:

const createUser = (values) => 
        const data =  refresh: window.localStorage.getItem('refreshToken') ;
        axios
            .post(`$SERVICE_URL/api/v1/auth/token/refresh`, data)
            .then((res) => 
                const config =  headers: 'Authorization': `Bearer $res.data.access`;
                axios
                    .post(`$SERVICE_URL/api/v1/users`, values, config)
                    .then((res) =>  
                        setRedirect(true);
                    )
                    .catch((err) => 
                        setRedirect(false);
                        setType('danger');
                        setText('Unable to create user.  Does this username already exist?');
                    );
            )
            .catch((err) => 
                setRedirect(true);
            );
    ;

如何修改此模型,以便每个用户都可以跟踪他们创建的用户?

我已经研究过创建了一个腌制属性,但是我认为这对于这个问题来说过于复杂了

【问题讨论】:

【参考方案1】:

为了确保我理解正确,您正在尝试创建一个应用程序的用户模型,您希望在其中跟踪哪个用户创建了哪个用户??

您提到每个用户都会跟踪他们创建的用户。

因此,我们可以添加一个额外的字段来存储哪个用户创建了新用户。 该字段可以是字符串字段,模型如下:

class User(db.Model):

    __tablename__ = "usersTable"
    
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(128), nullable=False, unique=True) # making username unique.
    password = db.Column(db.String(255), nullable=False)
    active = db.Column(db.Boolean(), default=True, nullable=False)
    created_date = db.Column(db.DateTime, default=func.now(), nullable=False)
    CreatedBy = db.Column(db.String(128), default="", nullable=False) # TO STORE THE USERNAME OF THE USER WHO CREATED THIS USER.
    usersCreated = db.Column(db.ARRAY(db.String(128)), default=[])

现在假设您的应用程序中有一个显示用户列表的页面。单击单个用户按钮时,我们将被重定向到显示有关用户的信息的页面。因此,要获取我们点击的用户创建的所有用户的列表,可以使用以下语句来完成。

usersCreatedByThisPerson = User.query.filter_by(CreatedBy = <name of the person who was clicked on>).all()

这将返回用户模型的实例列表。

我不知道我是否回答了您的问题。回答时必须假设很多事情。

如果我没有回答您的问题,请告诉我。谢谢。

好的,所以根据您的评论编辑答案。

我们要做的是在模型中,我们将添加另一列来存储该用户创建的所有用户的用户名。

我们将如何做?

在 POST Api 中,我们将发送此用户名、密码、CreatedBy,然后我们将相应地更新用户表。

假设 json 是:


   "username": usernameLatest,
   "password": password,
   "CreatedBy": usernameOld

现在在 post API 中,我们将在 username=usernameOld 行的 usersCreated 列中附加 usernameLatest。

所以在 post API 中,我们会做这样的事情:

oldUserInstance = Users.query.filter_by(username=usernameOld).first() # since username is unique, we just want the first one.

list(oldUserInstance.usersCreated).append(usernameLatest)

这样,我们可以不断更新创建当前用户的用户创建的所有用户。

让我知道是否清楚。

谢谢。

【讨论】:

这几乎是我需要的,但是模型将如何更新以包含此列表?我已经在我的问题中发布了我的 createuser 函数,以便您了解它的样子 对模型进行了更改,并在最后添加了说明。检查一下,让我知道它是否有效。 谢谢!这是完美的 有什么方法可以编辑模型的 created_by 部分,使其具有一对一的关系,它引用创建它的用户 ID? 对此不确定,但这会很有用。你能检查一下吗? ***.com/questions/6782133/… 。它是旧的。我还没有尝试过。你能检查一下吗?

以上是关于在 Flask 中跟踪用户活动的实现的主要内容,如果未能解决你的问题,请参考以下文章

Python Flask:跟踪用户会话?如何获取会话 Cookie ID?

在 Shiny 应用程序中跟踪用户活动

在网站上存储/跟踪用户活动 [关闭]

来自审计跟踪数据库的 Mysql 用户活动报告

当用户直接关闭浏览器时如何跟踪注销活动

使用 javascript 库的用户活动跟踪 [关闭]