بنقرة واحدة
python-patterns
Python(编程语言)开发原则与决策方法。覆盖框架选型、异步模式、类型标注与项目结构。强调思考而非照抄。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Python(编程语言)开发原则与决策方法。覆盖框架选型、异步模式、类型标注与项目结构。强调思考而非照抄。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
务实的编码标准—— 简洁、直接、不做过度设计、不写无用注释(Pragmatic coding standards)
性能分析原则。测量、分析与优化技术。
API design principles and decision-making(API 设计原则与决策逻辑)。REST vs GraphQL vs tRPC selection(选择)、response formats(响应格式)、versioning(版本控制)、pagination(分页)。
App Builder(应用构建编排器)主编排器。根据自然语言请求创建全栈应用,确定项目类型、选择技术栈并协调智能体。
Project scaffolding templates(项目脚手架模板)。用于从零创建新项目。包含 12 个技术栈模板。
Architectural decision-making framework(架构决策框架)。Requirements analysis(需求分析)、trade-off evaluation(权衡评估)、ADR documentation(架构决策记录)。Use when making architecture decisions or analyzing system design(用于架构决策与系统设计分析)。
| name | python-patterns |
| description | Python(编程语言)开发原则与决策方法。覆盖框架选型、异步模式、类型标注与项目结构。强调思考而非照抄。 |
| allowed-tools | Read, Write, Edit, Glob, Grep |
面向 2025 的 Python 开发原则与决策方法。
学习如何思考,不要只记模式。
本技能强调决策原则,不是固定代码模板。
你要构建什么?
|
+-- API 优先(API-first)/ 微服务
| +-- FastAPI(async、现代、速度快)
|
+-- 全栈 Web / CMS / 管理后台
| +-- Django(开箱即用,batteries-included)
|
+-- 简单应用 / 脚本 / 学习
| +-- Flask(极简、灵活)
|
+-- AI/ML API 服务化
| +-- FastAPI(Pydantic、async、Uvicorn)
|
+-- 后台任务
+-- Celery + 任意 Web 框架
| 维度 | FastAPI | Django | Flask |
|---|---|---|---|
| 适用场景 | API、微服务 | 全栈、CMS | 简单项目、学习 |
| 异步支持 | 原生支持 | Django 5.0+ | 依赖扩展 |
| 管理后台 | 手动构建 | 内置 Admin(管理后台) | 依赖扩展 |
| ORM(对象关系映射) | 自由选择 | Django ORM | 自由选择 |
| 学习曲线 | 低 | 中 | 低 |
async def(异步函数)更适合:
+-- I/O 密集操作(数据库、HTTP、文件)
+-- 大量并发连接
+-- 实时交互场景
+-- 微服务通信
+-- FastAPI/Starlette/Django ASGI(异步服务器网关接口)
def(同步函数)更适合:
+-- CPU 密集操作
+-- 简单脚本
+-- 遗留代码库
+-- 团队不熟悉 async
+-- 依赖阻塞型库(无 async 版本)
I/O bound(I/O 密集)-> async(等待外部资源)
CPU bound(CPU 密集)-> sync + multiprocessing(本地计算)
不要:
+-- 随意混用 sync 与 async
+-- 在 async 代码里调用阻塞库
+-- 为 CPU 任务强行上 async
| 需求 | 异步库 |
|---|---|
| HTTP 客户端 | httpx |
| PostgreSQL | asyncpg |
| Redis(内存数据库) | aioredis / redis-py async |
| 文件 I/O | aiofiles |
| 数据库 ORM | SQLAlchemy 2.0 async, Tortoise |
必须标注:
+-- 函数参数
+-- 返回类型
+-- 类属性
+-- 对外公开 API
可省略:
+-- 局部变量(让推断工作)
+-- 一次性脚本
+-- 测试代码(通常可选)
# 下面是模式示例,请理解其语义:
# Optional(可选)-> 可能为 None
from typing import Optional
def find_user(id: int) -> Optional[User]: ...
# Union(联合类型)-> 多类型之一
def process(data: str | dict) -> None: ...
# 泛型集合
def get_items() -> list[Item]: ...
def get_mapping() -> dict[str, int]: ...
# Callable(可调用)
from typing import Callable
def apply(fn: Callable[[int], str]) -> str: ...
适用场景:
+-- API 请求/响应模型
+-- 配置与 settings
+-- 数据校验
+-- 序列化
收益:
+-- 运行时校验
+-- 自动生成 JSON Schema(JSON 模式)
+-- 与 FastAPI 原生协同
+-- 清晰错误提示
小项目 / 脚本:
+-- main.py
+-- utils.py
+-- requirements.txt
中型 API:
+-- app/
| +-- __init__.py
| +-- main.py
| +-- models/
| +-- routes/
| +-- services/
| +-- schemas/
+-- tests/
+-- pyproject.toml
大型应用:
+-- src/
| +-- myapp/
| +-- core/
| +-- api/
| +-- services/
| +-- models/
| +-- ...
+-- tests/
+-- pyproject.toml
可按“分层”或“按功能”组织:
按分层:
+-- routes/(API 端点)
+-- services/(业务逻辑)
+-- models/(数据库模型)
+-- schemas/(Pydantic 模型)
+-- dependencies/(共享依赖)
按功能:
+-- users/
| +-- routes.py
| +-- service.py
| +-- schemas.py
+-- products/
+-- ...
Django 已支持 async(异步):
+-- 异步视图(Async views)
+-- 异步中间件(Async middleware)
+-- 异步 ORM(部分能力)
+-- ASGI 部署
Django 中适合 async(异步)的场景:
+-- 调用外部 API
+-- WebSocket(Channels)
+-- 高并发视图
+-- 触发后台任务
模型设计:
+-- 模型肥、视图薄(Fat models, thin views)
+-- 通过 manager 抽共用查询
+-- 共享字段放抽象基类
视图选择:
+-- 复杂 CRUD 用类视图(class-based views)
+-- 简单接口用函数视图(function-based views)
+-- DRF(Django REST Framework)场景可用 viewsets(视图集)
查询优化:
+-- 外键用 select_related()
+-- 多对多用 prefetch_related()
+-- 避免 N+1 查询
+-- 用 .only() 限定字段
async def 与 def 的选择适用 async def:
+-- 使用 async 数据库驱动
+-- 发起 async HTTP 调用
+-- I/O 密集操作
+-- 需要高并发吞吐
适用 def:
+-- 阻塞型操作
+-- sync 数据库驱动
+-- CPU 密集任务
+-- FastAPI 会自动放入线程池执行
依赖注入(Dependency Injection)适用:
+-- 数据库会话
+-- 当前用户 / 鉴权
+-- 配置对象
+-- 共享资源
收益:
+-- 可测试性提升(可 mock/模拟)
+-- 职责清晰分离
+-- 可自动清理资源(yield)
# FastAPI 与 Pydantic 深度集成:
# 请求校验
@app.post("/users")
async def create(user: UserCreate) -> UserResponse:
# user 在进入业务前已完成校验
...
# 响应序列化
# 返回类型会成为响应 schema
| 方案 | 适用场景 |
|---|---|
| BackgroundTasks | 简单、进程内任务 |
| Celery | 分布式、复杂工作流 |
| ARQ | 异步 + Redis |
| RQ | 简单 Redis 队列 |
| Dramatiq | Actor 模式,比 Celery 更轻量 |
FastAPI BackgroundTasks:
+-- 短平快任务
+-- 不要求持久化
+-- 即发即忘(Fire-and-forget)
+-- 与 Web 进程同进程运行
Celery/ARQ:
+-- 长耗时任务
+-- 需要重试机制
+-- 分布式 worker(执行进程)
+-- 持久化队列
+-- 复杂工作流
在 FastAPI 中:
+-- 定义自定义异常类
+-- 注册统一异常处理器
+-- 返回一致的错误格式
+-- 记录日志但不暴露内部细节
推荐模式:
+-- service 层抛领域异常
+-- handler 层转换为 HTTP 响应
+-- 客户端收到干净错误对象
应包含:
+-- 错误码(Error code,用于程序处理)
+-- 消息(Message,人类可读)
+-- 细节(Details,字段级,按需)
+-- 禁止返回堆栈(stack traces,出于安全)
| 类型 | 目的 | 工具 |
|---|---|---|
| 单元测试(Unit) | 业务逻辑 | pytest |
| 集成测试(Integration) | API 端点 | pytest + httpx/TestClient |
| 端到端测试(E2E) | 完整工作流 | pytest + DB |
# 异步测试使用 pytest-asyncio
import pytest
from httpx import AsyncClient
@pytest.mark.asyncio
async def test_endpoint():
async with AsyncClient(app=app, base_url="http://test") as client:
response = await client.get("/users")
assert response.status_code == 200
常用 fixture(测试夹具):
+-- db_session -> 数据库连接
+-- client -> 测试客户端
+-- authenticated_user -> 带 token(令牌)的用户
+-- sample_data -> 测试数据准备
开始实现前:
牢记: Python 模式的核心是“按当前场景做决策”。不要抄代码,先判断什么最适合你的应用。