您提供的 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
字段来标记删除时间,而不是真正删除记录。
- 表明该模型使用了软删除(soft delete)机制,可能通过
-
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())
详细说明:
-
创建实例:
mobile
:管理员的手机号码。username
:管理员的用户名。fullname
:管理员的全名。password
:设置明文密码,password
属性的 setter 方法会自动加密并存储到password_encrypted
字段。initial_password
:初始密码,通常用于首次登录后强制修改。status
:管理员的状态,1
表示启用,0
表示禁用。create_operator_id
和update_operator_id
:操作员的 ID,通常用于记录谁创建或更新了该记录。
-
添加和提交:
db.session.add(new_admin)
:将新实例添加到数据库会话中。db.session.commit()
:提交会话,将更改保存到数据库。
-
验证:
- 使用
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
默认为 0
,create_operator_id
和 update_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
表中添加新的管理员用户。确保在实际操作中根据您的具体需求和业务逻辑调整字段值,并注意数据的安全性和完整性。