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

ops/2025/1/23 2:35:17/

您提供的 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 模型:

python">from your_application import db
from your_application.models import AdminModel

说明

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

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

python"># 创建一个新的管理员用户实例
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 方法,确保在设置密码时传递的是明文密码。例如:

python">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 作为上下文管理器:

python">from your_application import db
from your_application.models import AdminModelwith 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 字段:

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

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

3.3 错误处理

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

python">from your_application import db
from your_application.models import AdminModel
from sqlalchemy.exc import IntegrityErrortry: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.ppmy.cn/ops/152347.html

相关文章

大数据Hadoop中MapReduce的介绍包括编程模型、工作原理(MapReduce、MapTask、ReduceTask、Shuffle工作原理)

MapReduce概述 MapReduce是Hadoop的核心项目之一,它是一个分布式计算框架, 可用于大数据并行处理的计算模型、框架和平台,主要解决海量数据的计算,是大数据中较为熟知的分布式计算框架。 MapReduce作为分布式计算框架&#xff0…

Linux内核编程(二十一)USB驱动开发-键盘驱动

一、驱动类型 USB 驱动开发主要分为两种:主机侧的驱动程序和设备侧的驱动程序。一般我们编写的都是主机侧的USB驱动程序。 主机侧驱动程序用于控制插入到主机中的 USB 设备,而设备侧驱动程序则负责控制 USB 设备如何与主机通信。由于设备侧驱动程序通常与…

redis 5.0版本和Redis 7.0.15的区别在哪里

Redis 5.0 和 Redis 7.0.15 之间存在多方面的区别,以下是主要差异点: 1. 新特性与功能 Redis 5.0: 引入了 Stream 数据类型,用于高性能、持久化和实时处理的数据流。 支持 客户端缓存,减少对服务器的请求&#xff0c…

kafka学习笔记6 ACL权限 —— 筑梦之路

在Kafka中,ACL(Access Control List)是用来控制谁可以访问Kafka资源(如主题、消费者组等)的权限机制。ACL配置基于Kafka的kafka-acls.sh工具,能够管理对资源的读取、写入等操作权限。 ACL介绍 Kafka的ACL是…

第17章:Python TDD回顾与总结货币类开发

写在前面 这本书是我们老板推荐过的,我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后,我突然思考,对于测试开发工程师来说,什么才更有价值呢?如何让 AI 工具更好地辅助自己写代码,或许…

Grafana系列之面板接入Prometheus Alertmanager

关于Grafana的仪表板Dashboard,以及面板Panel,参考Grafana系列之Dashboard。可以直接在面板上创建Alert,即所谓的Grafana Alert,参考Grafana系列之Grafana Alert。除了Grafana Alert外,面板也可接入Prometheus Alertma…

【EdgeAI实战】(1)STM32 边缘 AI 生态系统

【EdgeAI实战】(1)STM32 边缘 AI 生态系统 【EdgeAI实战】(1)STM32 边缘 AI 生态系统 1. STM32 边缘人工智能1.1 X-CUBE-AI 扩展包1.2 STM32 AI Model Zoo1.3 ST AIoT Craft 2. STM32N6 AI 生态系统 (STM32N6-AI)2.1 STM32N6 AI 产…

2、ansible的playbook

ansible的脚本:playbook剧本 脚本的作用:复用 playbook的组成部分 1、开头 ---:表示是一个yaml文件,但是可以忽略。 2、Tasks(任务):包含了目标主机上执行的操作,操作还是由模板来…