在 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 中跟踪用户活动的实现的主要内容,如果未能解决你的问题,请参考以下文章