with one click
backend-code-check-wuhao
// 用于自动格式化和检查 backend 目录下的 Python 代码。当修改完后台代码或用户要求格式化后台代码时调用此技能,强制执行 DDD 5层架构、类封装规范(每个 .py 必须有类,所有函数必须封装在类中)、文件头规范与标点符号规范。
// 用于自动格式化和检查 backend 目录下的 Python 代码。当修改完后台代码或用户要求格式化后台代码时调用此技能,强制执行 DDD 5层架构、类封装规范(每个 .py 必须有类,所有函数必须封装在类中)、文件头规范与标点符号规范。
[HINT] Download the complete skill directory including SKILL.md and all related files
| name | backend_code_check_wuhao |
| description | 用于自动格式化和检查 backend 目录下的 Python 代码。当修改完后台代码或用户要求格式化后台代码时调用此技能,强制执行 DDD 5层架构、类封装规范(每个 .py 必须有类,所有函数必须封装在类中)、文件头规范与标点符号规范。 |
作为 TRAI 平台核心后端开发人员 (wuhao) 的专属代码审查警察,请严格按照以下规范进行审查。
|| 子规范 | 路径 | 触发场景 |
||--------|------|----------|
|| Python 规范 | rules/python.md | 必读 |
|| 数据库规范 | rules/database.md | 新增 Model 时 |
|| 数据库表总览 | database_schema.md | 查看表结构时 |
|| API 设计规范 | api_design/routes.md | 新增 API 时 |
|| S3 存储与访问控制 | storage/s3_access.md | 涉及文件上传/下载时 |
|| DDD 五层架构 | architecture/layered.md | 必读 |
|| 启动规范 | startup.md | 启动后端时 |
,。!?:
✔ , . ! ? :
|| 设置项 | 值 |
||--------|------|
|| 标准环境 | trai31313 (Conda) |
|| 类型提示 | | 替代 Union/Optional,list[int] 替代 typing.List |
|| 缩进 | 4 个空格,禁止 Tab |
|| 跨平台路径 | 禁止硬编码 \,必须使用 pathlib |
from typing import List from typing import List # 重复导入!
from typing import List # 合并到一行
reimported 或 flake8 E401 检查|| 文件行数限制 | 说明 | ||-------------|------| || 单文件 ≤ 1500 行 | 超限必须按功能拆分 | || 建议单个 class ≤ 300 行 | 超限考虑拆分职责 |
|| 规则 | 说明 |
||------|------|
|| HTTP 方法 | 业务接口强制仅使用 POST,GET 仅用于查询类接口 |
|| 统一响应格式 | {"code": 200, "msg": "OK", "data": {}, "req_id": "...", "ts": "..."} |
|| 输入验证 | 所有输入必须通过 Pydantic 模型验证 |
|| 长任务处理 | 必须使用 BackgroundTasks 或消息队列 |
|| API 层禁止 | 禁止直接写 SQL、禁止写业务逻辑 |
|| 规则 | 说明 |
||------|------|
|| 表名 | 复数 snake_case (users, meeting_records) |
|| 主键 | UUID 或 BigInt Identity (禁止 Serial) |
|| 必备字段 | created_at, updated_at, deleted_at |
|| 强制注释 | 表和每个字段必须有中文 comment |
|| 查询红线 | 禁止 SELECT *、禁止 N+1 (必须 joinedload)、禁止裸 SQL 拼接 |
|| 迁移规范 | 禁止在生产环境执行 DDL,必须使用 Alembic |
|| 场景 | ❌ 禁止 | ✅ 正确 |
||------|---------|---------|
|| 异常捕获 | except Exception as e: | except Exception as error: |
|| 循环变量 | for i in range(n): | for index in range(count): |
|| 当前时间 | now = datetime.now() | current_time = datetime.now() |
|| 定时器 | t = Timer(...) | timer = Timer(...) |
|| 数组遍历 | for r in results: | for record in results: |
|| 文件对象 | f = open(...) | file_handle = open(...) |
|| 类型检查 | type = type(obj) | obj_type = type(obj) |
now → 使用 current_timeDate → 使用 current_date 或 date_objtime → 使用 current_time 或 elapsed_timetype → 使用 obj_type 或 item_typefile → 使用 file_path 或 file_handle#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 文件名: {实际文件名}
# 作者: wuhao
# 日期: 2026_04_09_10:47:12 ← 当前时间(每次修改配置时刷新)
# 描述: {该文件的用途/功能简述,一句话概括}
# ============================================================
# TRAI Backend Environment Configuration
# 文件名: .env
# 作者: wuhao
# 日期: 2026_04_09_10:47:12 ← 当前时间(每次修改配置时刷新)
# 描述: {配置文件用途简述}
# 说明: {补充说明}
# ============================================================
date +%Y_%m_%d_%H:%M:%S 或 Get-Date -Format "yyyy_MM_dd_HH:mm:ss"# 日期: 2026_04_09_17:30:00 # ❌ 估算/记忆的时间
# 日期: 2026_01_01_00:00:00 # ❌ 固定历史时间
# 日期: {current_time} # ❌ 未获取真实时间
# 假设当前时间是 2026_04_09_10:45:00
# 日期: 2026_04_09_10:45:00 # ✅ 使用真实获取的时间
文件中出现的每一个 class 及每一个 def/async def,都必须具备中文 docstring,禁止留空。包括私有方法、__init__、@staticmethod、@classmethod 同等强制。
docstring 内容必须包含:
passlib + bcrypt/Argon2 哈希,禁止明文存储或使用 MD5/SHA1tenant_idx-amz-expected-bucket-owner详见
backend/startup.md
|| 场景 | 说明 |
||------|------|
|| 端口占用 | run.py 自动检测并清理占用端口的进程 |
|| 日志记录 | run.py 使用 LogWriter 将控制台输出同步写入 logs/backend_*.log |
venv、virtualenv 等非 conda 工具创建或管理 Python 虚拟环境pip install --user 等绕过 conda 管理的方式安装包base、trai、trai31313 等)trai31313),必须使用该名称conda create -n trai31313 python=3.13.13 -y),禁止跳过此步骤直接使用其他环境D:\anaconda3\envs\{环境名}\python.execonda run -n {环境名} pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -e .2>&1 隐藏错误输出:所有 shell 命令必须能够正常显示输出结果,便于排查问题2>&1,但必须确保输出内容对用户可见