# coding=utf-8 """ 平台API Key模型 存储用户创建的平台API密钥信息 用于调用OpenAI兼容网关的密钥管理 """ import uuid_utils.compat as uuid from django.db import models from common.mixins.app_model_mixin import AppModelMixin from users.models import User class PlatformApiKeyStatus(models.TextChoices): ACTIVE = "active", "启用" DISABLED = "disabled", "禁用" class PlatformApiKey(AppModelMixin): """ 平台API Key 存储用户创建的平台API密钥信息 - API Key使用SHA256哈希存储,仅在创建时返回完整密钥 - 每个用户最多可创建5个有效API Key - 支持启用/禁用状态管理 """ id = models.UUIDField(primary_key=True, max_length=128, default=uuid.uuid7, editable=False, verbose_name="主键id") user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="用户") api_key_hash = models.CharField(max_length=64, verbose_name="API Key哈希值", db_index=True) api_key_prefix = models.CharField(max_length=20, verbose_name="API Key显示前缀") name = models.CharField(max_length=100, verbose_name="备注名称", null=True, blank=True) status = models.CharField(max_length=20, verbose_name="状态", choices=PlatformApiKeyStatus.choices, default=PlatformApiKeyStatus.ACTIVE, db_index=True) last_used_at = models.DateTimeField(verbose_name="最后使用时间", null=True, blank=True) class Meta: db_table = "platform_api_key" verbose_name = "平台API Key" verbose_name_plural = "平台API Key" ordering = ["-create_time"] def __str__(self): return f"{self.api_key_prefix} ({self.name or '未命名'})"