From 7925948e693174813fbe1a0c90e62d570f86e64d Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Wed, 7 Oct 2026 20:16:08 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E8=AE=A2=E9=98=85=E5=BC=8F=E8=BD=AF?= =?UTF-8?q?=E4=BB=B6=E6=8F=90=E4=BE=9B):=20=E6=8C=89=E5=8C=85=E5=90=8D?= =?UTF-8?q?=E8=AF=A6=E6=83=85=E6=8E=A5=E5=8F=A3=E5=9C=A8=20README=20?= =?UTF-8?q?=E4=B8=BA=E7=A9=BA=E6=97=B6=E5=90=88=E6=88=90=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=20Markdown?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增 _DefaultReadme:由包名、说明、安装命令、依赖表与版本历史合成 README;仅 PackageByNameView(官网数据源)使用,配置页读到的仍是作者原文,避免合成内容被回写。 --- GVSDServiceServer/apps/venom/views.py | 36 ++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/GVSDServiceServer/apps/venom/views.py b/GVSDServiceServer/apps/venom/views.py index 6aa5a1db..bb2169c7 100644 --- a/GVSDServiceServer/apps/venom/views.py +++ b/GVSDServiceServer/apps/venom/views.py @@ -97,6 +97,36 @@ def _DetailRow(package): } +def _DefaultReadme(package, releases): + """包作者未填写 README 时,由包信息合成一份 Markdown 默认 README + + 仅用于官网展示(`PackageByNameView`);配置页读取到的仍是「作者填写的原文」, + 避免把合成内容回写成用户数据。 + """ + lines = [f'# {package.PackageName}', ''] + lines += [package.PackageDesc.strip() or '该软件包暂未填写说明。', ''] + + lines += ['## 安装', '', '```bash', f'venom install {package.PackageName}', '```', ''] + + dependencies = package.Dependencies or [] + lines += ['## 依赖', ''] + if dependencies: + lines += ['| 依赖包 | 版本约束 |', '| --- | --- |'] + lines += [f"| {d.get('Name', '')} | {d.get('Version') or '*'} |" for d in dependencies] + else: + lines += ['无外部依赖。'] + lines += [''] + + lines += ['## 版本历史', ''] + if releases: + lines += [f"- `{r.Version}` · {_Time(r.CreateTime)}" for r in releases] + else: + lines += ['尚未发布任何版本。'] + lines += [''] + + return '\n'.join(lines) + + class PackageListView(APIView): """包列表 / 新建包""" @@ -198,4 +228,8 @@ class PackageByNameView(APIView): PackageName=name).first() if package is None: return _err(f'包「{name}」不存在', 404, status=404) - return _ok(_DetailRow(package)) + row = _DetailRow(package) + # 作者未填 README 时给出合成内容,官网不出现「无 README」占位 + if not row['Readme']: + row['Readme'] = _DefaultReadme(package, list(package.releases.all())) + return _ok(row)