在 Flask 中跟踪用户 Activity 的实现

Implementation For Keeping Track of User Activity in Flask

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

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);
            });
    };

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

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

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

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

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

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()

此 returns Users 模型的实例列表。

不知道我是否回答了你的问题。回答的时候要假设很多事情。

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

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

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

我们将如何做?

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

假设 json 是:

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

现在在 post API 中,我们将在 usersCreated 列中的 username=usernameOld 的行中追加 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)

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

让我知道是否清楚。

谢谢。