当前位置: 首页 > article >正文

典型的 flask的 用户模型,使用 flask shell 添加数据

您提供的 AdminModel 是一个使用 SQLAlchemy 定义的 Flask 模型,用于管理管理员用户的数据。以下是对该模型的详细分析以及如何通过 Flask 的 shell 界面添加数据的步骤。

1. 模型分析

1.1 表结构
  • 表名

    • admin(在 SCHEMA 模式下的 admin 表)。
  • 字段

    • admin_id:主键,自增类型 (BigInteger)。
    • mobile:手机号码,可为空 (String(20))。
    • username:用户名,可为空,并建立索引 (String(64))。
    • fullname:全名,不允许为空,并建立索引 (VARCHAR(64))。
    • password_encrypted:加密后的密码 (BYTEA)。
    • initial_password:初始密码 (VARCHAR(64))。
    • initial_password_login_time:初始密码登录时间 (TIMESTAMP),可为空。
    • last_login_time:最后登录时间 (TIMESTAMP),可为空。
    • status:状态,整数类型,默认为 0,不允许为空。
    • delete_dt:删除时间 (Integer),可为空。
    • create_operator_id:创建操作员 ID,默认为 0,不允许为空,并建立索引 (BigInteger)。
    • update_operator_id:更新操作员 ID,默认为 0,不允许为空,并建立索引 (BigInteger)。
1.2 特殊属性和方法
  • 密码处理

    • @property password:获取解密后的密码。
    • @password.setter:设置密码时自动加密并存储到 password_encrypted 字段。
  • to_dict 方法

    • 将模型实例转换为字典格式,便于序列化。
    • initial_password 字段:如果当前密码与初始密码相同,则显示初始密码;否则,显示为空字符串。
    • last_login_time:硬编码为 "2024-02-21 11:53:35",这可能是一个占位符或需要根据实际情况调整。
1.3 其他配置
  • query_class = QueryWithSoftDelete

    • 表明该模型使用了软删除(soft delete)机制,可能通过 delete_dt 字段来标记删除时间,而不是真正删除记录。
  • BaseModel._declare_dt_column()

    • 调用基类的方法,可能用于声明时间戳字段(如 created_at, updated_at 等),具体取决于 BaseModel 的实现。

2. 通过 Flask Shell 添加数据

要通过 Flask 的 shell 界面添加数据,可以按照以下步骤操作:

2.1 启动 Flask Shell

在终端中,导航到您的 Flask 项目目录,并启动 Flask shell:

flask shell

注意:确保您的 Flask 应用已经正确配置,并且所有必要的环境变量(如 FLASK_APP)已经设置。

2.2 导入必要的模块和模型

在 shell 中,导入 db 会话和 AdminModel 模型:

from your_application import db
from your_application.models import AdminModel

说明

  • your_application 替换为您的 Flask 应用包名。
  • models 替换为包含 AdminModel 的模块名。
2.3 创建并添加管理员用户

以下是一个示例,展示如何创建一个新的管理员用户并将其添加到数据库中:

# 创建一个新的管理员用户实例
new_admin = AdminModel(
    mobile='13800138000',
    username='admin_user',
    fullname='管理员用户',
    password='securepassword123',  # 明文密码
    initial_password='securepassword123',
    status=1,
    create_operator_id=1,
    update_operator_id=1
)

# 将新用户添加到会话中
db.session.add(new_admin)

# 提交会话以保存更改
db.session.commit()

# 可选:验证数据是否添加成功
admin_record = AdminModel.query.filter_by(username='admin_user').first()
print(admin_record.to_dict())

详细说明

  1. 创建实例

    • mobile:管理员的手机号码。
    • username:管理员的用户名。
    • fullname:管理员的全名。
    • password:设置明文密码,password 属性的 setter 方法会自动加密并存储到 password_encrypted 字段。
    • initial_password:初始密码,通常用于首次登录后强制修改。
    • status:管理员的状态,1 表示启用,0 表示禁用。
    • create_operator_idupdate_operator_id:操作员的 ID,通常用于记录谁创建或更新了该记录。
  2. 添加和提交

    • db.session.add(new_admin):将新实例添加到数据库会话中。
    • db.session.commit():提交会话,将更改保存到数据库。
  3. 验证

    • 使用 AdminModel.query.filter_by(username='admin_user').first() 查询刚刚添加的管理员用户。
    • 使用 print(admin_record.to_dict()) 输出管理员用户的字典表示。
2.4 处理加密密码

由于 password 属性有 setter 方法,确保在设置密码时传递的是明文密码。例如:

admin = AdminModel(
    mobile='13800138000',
    username='admin_user',
    fullname='管理员用户',
    password='new_secure_password',  # 明文密码
    initial_password='new_secure_password',
    status=1,
    create_operator_id=1,
    update_operator_id=1
)

这样,password_encrypted 字段会自动存储加密后的密码。

2.5 使用上下文管理器(可选)

为了确保会话在发生异常时能够正确回滚,可以使用 db.session 作为上下文管理器:

from your_application import db
from your_application.models import AdminModel

with db.session as session:
    new_admin = AdminModel(
        mobile='13800138000',
        username='admin_user',
        fullname='管理员用户',
        password='securepassword123',
        initial_password='securepassword123',
        status=1,
        create_operator_id=1,
        update_operator_id=1
    )
    session.add(new_admin)
    session.commit()

3. 其他注意事项

3.1 软删除

由于模型使用了软删除机制(通过 delete_dt 字段),如果需要删除管理员用户,可以设置 delete_dt 字段:

admin_record.delete_dt = int(time.time())  # 使用当前时间戳
db.session.commit()
3.2 验证数据

在添加数据之前,确保所有必填字段都有适当的值。例如,fullname 是必填的,status 默认为 0create_operator_idupdate_operator_id 也需要设置。

3.3 错误处理

在实际应用中,建议添加错误处理机制,以处理可能出现的异常。例如:

from your_application import db
from your_application.models import AdminModel
from sqlalchemy.exc import IntegrityError

try:
    with db.session as session:
        new_admin = AdminModel(
            mobile='13800138000',
            username='admin_user',
            fullname='管理员用户',
            password='securepassword123',
            initial_password='securepassword123',
            status=1,
            create_operator_id=1,
            update_operator_id=1
        )
        session.add(new_admin)
        session.commit()
except IntegrityError as e:
    session.rollback()
    print(f"Error adding admin user: {e}")

4. 总结

通过以上步骤,您可以通过 Flask 的 shell 界面向 admin 表中添加新的管理员用户。确保在实际操作中根据您的具体需求和业务逻辑调整字段值,并注意数据的安全性和完整性。


http://www.kler.cn/a/513846.html

相关文章:

  • 艺术家迟首飞在特殊历史时刻展现中国艺术力量
  • MySQL管理事务处理
  • AIGC 生图应用场景与实操技巧
  • 蓝桥杯算法日常|c\c++常用竞赛函数总结备用
  • 电阻电位器可调电阻信号隔离变送器典型应用
  • 运算放大器应用电路设计笔记(四)
  • 【leetcode100】将有序数组转换为二叉搜索树
  • Scheme语言的物联网
  • 基于python的博客系统设计与实现
  • 【FISCO BCOS】二十四、通过Java SDK对FISCO BCOS进行压力测试
  • npm run dev 时直接打开Chrome浏览器
  • 【数据分享】1929-2024年全球站点的逐年最低气温数据(Shp\Excel\免费获取)
  • 工业相机 SDK 二次开发-Halcon 插件
  • 深入理解 Java 并发编程中的锁机制
  • C# HTTP/HTTPS 请求测试小工具
  • MyBatis 注解开发详解
  • 大数据和人工智能融合展望
  • 深入探索C#中Newtonsoft.Json库的高级进阶之路
  • MDX语言的字符串处理
  • Docker集成onlyoffice实现预览功能