mcpField
P
python-best-practices

python-best-practices

github.com/c0x12c开发111115 次安装21 周前更新
代码仓库

关于 python-best-practices

python-best-practices 是面向 Python 和 FastAPI 开发的速查技能,涵盖架构、Pydantic v2、异步模式、持久化、配置和分页,并指向 code-patterns.md 中的详细示例。

主要功能

  1. 01路由器-服务-仓储分层架构
  2. 02Pydantic v2 模式指导
  3. 03异步与 lifespan 模式
  4. 04软删除与 SQLAlchemy 指导
  5. 05配置和分页模式

适用场景

  1. 01规划 FastAPI 项目结构
  2. 02设计 API 模式和端点
  3. 03审查异步路由与数据库模式
  4. 04统一配置和列表响应

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/c0x12c/ai-toolkit --skill python-best-practices

安装后在 Claude Code 中输入/python-best-practices确认已加载。

附带文件code-patterns.md

详细介绍

Python + FastAPI 最佳实践 — 快速参考

分层架构

路由 → 服务 → 仓储 → 数据库。每一层只能调用其下方的一层。

完整的项目结构和分层示例请参阅 code-patterns.md。

Pydantic v2

将 Create、Update 和 Response 模式分开。使用 ConfigDict(from_attributes=True) 集成 ORM。使用 str | None 语法(而非 Optional[str])。

模式示例请参阅 code-patterns.md。

异步模式

用于 I/O 路由时使用 async def,用于 CPU 密集型任务时使用普通 def。使用 lifespan 上下文管理器(而非 on_event)。使用 httpx.AsyncClient 发起外部 HTTP 调用。

异步示例请参阅 code-patterns.md。

软删除

在 SQLAlchemy 模型上使用 SoftDeleteMixin。在所有查询中添加筛选条件 where(Model.deleted_at.is_(None))。

Mixin 和仓储模式请参阅 code-patterns.md。

配置

使用 pydantic-settings 管理所有配置。绝不硬编码密钥、URL 或魔法数字。

Settings 类模式请参阅 code-patterns.md。

分页

所有列表端点都使用通用的 PaginatedResponse[T]。始终返回 total、page、limit 和 has_more。

模式请参阅 code-patterns.md。

注意事项

  • async def 和 def 会影响性能。 调用阻塞代码(例如 time.sleep() 或同步数据库驱动程序)的 async def 路由会阻塞整个事件循环。CPU 密集型工作应使用普通 def — FastAPI 会在线程池中运行它。只有在需要 await 某些操作时才使用 async def。

  • datetime.utcnow() 自 Python 3.12 起已弃用。 请改用 datetime.now(UTC)。旧函数会返回无时区信息的 datetime,从而导致比较错误。新函数会返回带时区信息的 UTC 时间。

  • Pydantic 中的可变默认参数看似安全,但也有需要注意之处。 tags: list[str] = [] 在 Pydantic 中可用(它会复制默认值)。但 tags: list[str] = Field(default_factory=list) 更明确,对嵌套模型也更安全。对于简单字段,两种写法均可。对于复杂的嵌套默认值,始终使用 default_factory。

  • from_attributes=True 取代了 orm_mode=True。 Pydantic v2 更改了配置 API。使用旧的 orm_mode 不会报错,但会被静默忽略 — ORM 对象将无法正确序列化。

  • SQLAlchemy 的 Column() 已属旧式写法。 SQLAlchemy 2.0 应使用 Mapped[type] 和 mapped_column()。旧的 Column(String) 仍然可用,但会失去类型检查器支持和 IDE 自动补全。

评论

支持 Markdown