platform_api_key.py 1.7 KB

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