模型
class User(models.Model):
"""
用户数据模型
字段说明:
- id: 用户唯一标识
- username: 用户名
- email: 邮箱
- password_hash: 密码哈希值
- is_active: 是否激活
- is_staff: 是否为管理员
- metadata: 用户额外信息
- created_at: 创建时间
- updated_at: 更新时间
- invalid_tokens: 已失效的令牌列表
"""
id = fields.IntField(pk=True, description="用户ID")
username = fields.CharField(max_length=50, unique=True, description="用户名")
email = fields.CharField(max_length=100, unique=True, null=True, description="邮箱")
password_hash = fields.CharField(max_length=128, description="密码哈希值")
is_active = fields.BooleanField(default=True, description="用户是否激活")
is_staff = fields.BooleanField(default=False, description="是否为管理员")
lastLogin = fields.DatetimeField(null=True, description="最后登录时间")
ip = fields.CharField(max_length=255, null=True, description="IP地址")
addr = fields.CharField(max_length=255, null=True, description="地址")
avatar = fields.CharField(max_length=255, null=True, description="头像")
created_at = fields.DatetimeField(auto_now_add=True, description="创建时间")
updated_at = fields.DatetimeField(auto_now=True, description="更新时间")
# 关联角色表
roles = fields.ManyToManyField(
"models.Role",
related_name="users",
through="user_roles",
description="用户角色"
)
class Meta:
table = "users"
ordering = ["-created_at"]
检查
from tortoise.functions import Count
async def init_db():
# 方法1:使用 .exists() 方法
has_users = await User.exists()
# 方法2:使用 .count() 方法
user_count = await User.all().count()
# 方法3:使用聚合函数
result = await User.annotate(count=Count('id')).values('count')
count_value = result[0]['count'] if result else 0
if not has_users: # 或 if user_count == 0:
# 创建初始管理员用户
admin_user = await User.create(
username="admin",
email="admin@example.com",
password_hash="hashed_password_here", # 记得使用安全的哈希方法
is_active=True,
is_staff=True
)
# 可以在这里添加初始角色分配等其他操作
print("初始管理员用户已创建")
else:
print(f"数据库中已存在 {user_count} 个用户记录")
评论