You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask用户活动追踪:记录用户创建关系的User模型修改咨询

实现用户创建关系追踪方案

1. 调整User模型,新增自引用外键关联

你只需要给User表加一个自引用的外键,实现创建者和被创建用户的一对多关联,修改后的完整模型代码如下:

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)
    # 新增字段:记录创建该用户的用户ID
    created_by_id = db.Column(db.Integer, db.ForeignKey('usersTable.id'), nullable=True)
    # 新增关联:获取当前用户创建的所有用户,反向引用可以直接通过.creator获取创建者
    created_users = db.relationship(
        'User',
        backref=db.backref('creator', remote_side=[id]),
        lazy='dynamic'
    )

注意created_by_id设置为可空,是为了兼容初始的超级管理员账号(没有上级创建者)。

2. 修改后端用户创建接口逻辑

你的前端代码已经在请求时携带了认证Token,不需要修改任何前端代码,只需要在后端创建用户的接口中,从Token解析出当前登录的用户ID,赋值给新用户的created_by_id字段即可。
以Flask-JWT-Extended扩展为例,核心逻辑参考:

from flask_jwt_extended import jwt_required, get_jwt_identity

# 你的创建用户接口路由
@api.route('/users', methods=['POST'])
@jwt_required()
def create_user():
    # 原有参数校验、密码加密逻辑保持不变
    # 从JWT中获取当前登录的用户ID,即创建者ID
    current_user_id = get_jwt_identity()
    # 新建用户时赋值创建者ID
    new_user = User(
        username=request.json['username'],
        password=your_password_hash_func(request.json['password']),
        created_by_id=current_user_id
    )
    db.session.add(new_user)
    db.session.commit()
    # 原有返回逻辑保持不变

3. 常用操作示例

# 获取ID为3的用户创建的所有账号
user = User.query.get(3)
created_user_list = user.created_users.all()

# 获取ID为5的用户的创建者信息
user = User.query.get(5)
creator_info = user.creator

# 统计每个用户创建的账号数量(直接用SQL查询,性能远高于pickle方案)
from sqlalchemy import func
create_count = db.session.query(
    User.created_by_id, func.count(User.id)
).group_by(User.created_by_id).all()

方案优势

相比pickle字段方案,该方案有明显优势:

  • 数据结构化存储,所有关联查询、统计都可以直接通过SQL完成,不需要反序列化全量数据
  • 没有pickle的版本兼容性、安全风险问题
  • 关联关系由数据库外键约束维护,数据一致性更高
  • 操作逻辑简单,无需额外处理序列化、反序列化逻辑

内容的提问来源于stack exchange,提问作者Angela Rubchinksy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 00:54:01