File size: 2,593 Bytes
b4f2238 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | """
系统配置模型
用于存储系统级别的配置项,支持在 Django Admin 中进行管理.
"""
# mypy: ignore-errors
from typing import ClassVar
from django.db import models
from django.utils.translation import gettext_lazy as _
class SystemConfig(models.Model):
"""系统配置模型
用于存储系统级别的配置项,支持在 Django Admin 中进行管理.
配置项按分类组织,支持加密存储敏感信息.
"""
id: int
class Category(models.TextChoices):
"""配置分类"""
FEISHU = "feishu", _("飞书配置")
DINGTALK = "dingtalk", _("钉钉配置")
WECHAT_WORK = "wechat_work", _("企业微信配置")
COURT_SMS = "court_sms", _("法院短信配置")
AI = "ai", _("AI 服务配置")
LLM = "llm", _("LLM 大模型配置")
ENTERPRISE_DATA = "enterprise_data", _("企业数据配置")
SCRAPER = "scraper", _("爬虫配置")
OCR = "ocr", _("OCR 服务配置")
GENERAL = "general", _("通用配置")
key = models.CharField(
max_length=100, unique=True, verbose_name=_("配置键"), help_text=_("配置项的唯一标识符,如 FEISHU_APP_ID")
)
value = models.TextField(blank=True, default="", verbose_name=_("配置值"), help_text=_("配置项的值"))
category = models.CharField(
max_length=50,
choices=Category.choices,
default=Category.GENERAL,
verbose_name=_("分类"),
help_text=_("配置项所属分类"),
)
description = models.CharField(
max_length=255, blank=True, default="", verbose_name=_("描述"), help_text=_("配置项的说明")
)
is_secret = models.BooleanField(
default=False,
verbose_name=_("敏感信息"),
help_text=_("是否为敏感信息(如密钥、密码等)"),
)
is_active = models.BooleanField(default=True, verbose_name=_("启用"), help_text=_("是否启用此配置项"))
created_at = models.DateTimeField(auto_now_add=True, verbose_name=_("创建时间"))
updated_at = models.DateTimeField(auto_now=True, verbose_name=_("更新时间"))
class Meta:
verbose_name = _("系统配置")
verbose_name_plural = _("系统配置")
ordering: ClassVar = ["category", "key"]
indexes: ClassVar = [
models.Index(fields=["category"], name="core_system_categor_aa7ba2_idx"),
models.Index(fields=["key"], name="core_system_key_07f5b4_idx"),
]
def __str__(self) -> str:
return f"{self.get_category_display()} - {self.key}"
|