【问题标题】:Implementation For Keeping Track of User Activity in Flask在 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);
            });
    };

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

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

【问题讨论】:

    标签: python list object flask flask-sqlalchemy


    【解决方案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?
    • 对此不确定,但这会很有用。你能检查一下吗? stackoverflow.com/questions/6782133/… 。它是旧的。我还没有尝试过。你能检查一下吗?
    猜你喜欢
    • 1970-01-01
    • 2013-03-22
    • 1970-01-01
    • 1970-01-01
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    • 2016-02-10
    • 2010-12-29
    相关资源
    最近更新 更多