From 0fab2aac3684b5893439c06da751306419f9f17b Mon Sep 17 00:00:00 2001 From: pmc <740076875@qq.com> Date: Thu, 7 May 2026 17:09:13 +0800 Subject: [PATCH] =?UTF-8?q?docs(01):=20=E6=8D=AE=20researcher=20=E5=8F=91?= =?UTF-8?q?=E7=8E=B0=E4=BF=AE=E6=AD=A3=20CONTEXT.md=EF=BC=88i18n=20?= =?UTF-8?q?=E8=B7=9F=E4=BB=93=E5=BA=93=E5=AD=97=E9=9D=A2=E9=87=8F=E7=BA=A6?= =?UTF-8?q?=E5=AE=9A=EF=BC=8Capp=20=E5=BD=92=E5=B1=9E=E9=94=81=E5=AE=9A=20?= =?UTF-8?q?aiapp=EF=BC=8C=E5=8D=95=E4=BE=8B=E5=A4=8D=E5=88=BB=20AffinitySe?= =?UTF-8?q?tting=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../.planning/phases/01-credential-data-layer/01-CONTEXT.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/qy_lty/.planning/phases/01-credential-data-layer/01-CONTEXT.md b/qy_lty/.planning/phases/01-credential-data-layer/01-CONTEXT.md index 39be64b..ff60e31 100644 --- a/qy_lty/.planning/phases/01-credential-data-layer/01-CONTEXT.md +++ b/qy_lty/.planning/phases/01-credential-data-layer/01-CONTEXT.md @@ -32,7 +32,9 @@ - `app_id`:CharField,max_length 合理(128 足够覆盖常见服务商 ID 长度),允许空字符串(运营初次访问时尚未填写) - `access_token`:CharField,max_length 长(512 留余量,覆盖 JWT 之类的长 token),允许空字符串 - `updated_at`:DateTimeField,`auto_now=True`,每次保存自动刷新 -- 推荐 app 归属:在现有 `aiapp` / `common` / `userapp` 三个 app 里选一个最贴合的;优先 `aiapp`(凭据语义偏向 AI 服务商接入),但若 `aiapp` 已有强语义模型可考虑 `common`。**最终 app 归属由 planner 在 read_first 阶段读完 `aiapp/models.py` 与 `common/` 后决定** +- **app 归属:`aiapp`**(researcher 已确认:`common/` 不是 Django app 无 `apps.py`、未在 `INSTALLED_APPS`,无法承载 Model;`userapp/models.py` 已 471 行承重过大;`aiapp/models.py` 当前仅 51 行追加合适;语义"凭据"与 AI 服务商接入强相关)。模型追加到 `aiapp/models.py` 末尾,不新建子文件 +- **单例模式直接复刻 `userapp.models.AffinitySetting`(247-314 行)**:仓库已有 pk=1 单例范本含 `save()` 钩子重定向 + `get_solo()` 类方法。Planner 必须把这两个文件读进 read_first,照抄结构,不要重新发明 +- **脱敏工具新建 `common/utils.py:mask_token(token, visible_tail=4)`**:grep `mask|脱敏|redact` 在代码侧 0 命中,须新建。放 `common/utils.py` 让 Phase 3 阿里云日志 formatter 可直接复用 - 模型 `__str__` 返回类似 `f"凭据槽位 (updated {self.updated_at:%Y-%m-%d %H:%M})"` 的可读串 ### 数据迁移 @@ -49,7 +51,7 @@ - 编辑表单字段:`app_id`、`access_token` 都明文(让运营录入 / 修改) - **隐藏"新增"按钮**:重写 `has_add_permission(self, request)` 返回 `False if exists else True`(即记录已存在时禁止新增) - **禁止删除**(避免运营误删后单例语义丢失):重写 `has_delete_permission(self, request)` 返回 `False` -- 中英 i18n:模型 `Meta.verbose_name` / `verbose_name_plural` 用 `_()` 标记翻译;admin 列表方法的 `short_description` 同样标记 +- 中英 i18n:**沿用仓库实操约定 = 中文字面量**(researcher 实测:本仓库 4 个 admin.py 全是中文字面量,`_()` 仅 7 处零散使用,且 `LANGUAGES` / `LOCALE_PATHS` 在 `settings.py` 已被注释掉)。Phase 1 不为 `verbose_name` / `short_description` 引入 `gettext_lazy`,保持与 `userapp/admin.py` / `aiapp/admin.py` 一致。i18n 体系化清洗留给独立 milestone。 ### 兼容性 / 不引入新依赖