朋友圈

发现更多有趣的博主。

43 篇订阅
六小时之外 六小时之外

FastAPI系列-12-ORM介绍

本文介绍了ORM(对象关系映射)在Python与MySQL之间的作用,对比了aiomysql原生SQL路径和SQLAlchemy异步ORM路径。ORM核心在于将数据库表映射为Python类,自动完成SQL生成、参数绑定和结果转换,从而减少样板代码、统一防注入参数化,并通过会话集中管理对象状态与事务。原生路径需手动控制连接、游标和结果字典构造,适合需要精细控制执行计划的复杂场景;ORM路径通过查询表...

六小时之外 六小时之外

FastAPI系列-11-中间件与依赖注入的区别

中间件与依赖注入的核心区别在于触发时机和可见范围:中间件作用于整个ASGI调用栈,在路由匹配前即执行,覆盖所有请求(包括404和异常),适合协议级的全站横切需求(如访问日志、CORS、请求ID);依赖注入仅在路由匹配成功后解析,仅对特定端点生效,适合业务级复用(如分页、当前用户、数据库会话)。选型遵循三条原则:协议级需求走中间件,业务级需求走依赖,跨层数据通过`request.scope`传递以保...

六小时之外 六小时之外

FastAPI系列-10-依赖注入

FastAPI 通过依赖注入实现上下文解析与业务逻辑的解耦。处理函数在签名中用 `Depends` 声明“需要什么”,框架启动时构建依赖图,请求时按拓扑序解析并注入结果,无需关心资源构造细节。`yield` 依赖形态将资源生命周期分为两段:`yield` 之前准备资源并注入,响应返回后自动执行 `yield` 之后的清理逻辑,框架借助 `AsyncExitStack` 保证即使处理函数异常也能完成...

六小时之外 六小时之外

FastAPI系列-08-异常处理

FastAPI 通过全局异常处理机制分离异常抛出与响应构造,避免每个路由处理器重复编写 try/except。异常沿异步栈冒泡,框架根据方法解析顺序匹配最具体的处理器,支持装饰器或字典两种注册方式,最终合并到同一个分派链。处理器函数可以是 `def` 或 `async def`,框架自动调度。核心实践是将 `HTTPException` 及其它业务异常直接抛出,在全局处理器中统一转换为一致的 JS...

六小时之外 六小时之外

FastAPI系列-06-请求与响应

FastAPI 通过 Pydantic 模型分别为请求与响应定义独立的契约,不共用同一套模型。请求模型(如 BookCreate)只包含客户端可写字段,过滤掉 id 等由服务端生成的属性;响应模型(如 BookOut)只暴露可读字段,防止数据库内部列外泄。框架内部有两条独立管线:请求体先经请求模型校验,通过后进入 handler;handler 返回的数据再经由 `response_model` ...

六小时之外 六小时之外

FastAPI系列-05-参数分类

FastAPI通过路径模板匹配、类型推断和显式标记三层规则决定参数来源:路径中的变量归为`Path`,标量类型默认为`Query`,Pydantic模型则推断为`Body`。使用`Annotated`可将类型与约束统一声明,提升可读性。无论数据来自何处,所有参数最终都汇入同一套类型转换与校验流水线,校验失败会立即返回422响应。参数的分类与Handler采用`async def`还是`def`形态...

六小时之外 六小时之外

FastAPI系列-04-路由

随着接口数量增长,所有端点集中在一个文件会导致代码导航困难和文档混乱。FastAPI 提供 `APIRouter` 作为“迷你应用”,可按业务域独立管理端点,并通过 `prefix` 统一路径前缀、`tags` 进行 OpenAPI 文档分组,最后像拼乐高一样挂载到主应用上。 路由注册时,端点被拷贝进应用路由表。请求处理时,框架根据处理函数的形态自动分流:`async def` 函数留在事件循环内...