Loading......

朋友圈

朋友们的最新动态

12 Updates
meytao 头像
meytao

FastAPI系列-09-中间件

FastAPI 中间件遵循 ASGI 洋葱模型,请求按注册顺序先穿过所有中间件再进入路由,响应逆序返回。`@app.middleware("http")` 支持 `async def` 和 `def` 两种形态:`async def` 在事件循环内 `await call_next`,适合需读请求体或异步 I/O;`def` 被 Starlette 投递至线程池执行,适合纯计算,如生成请求 ID。注册顺序即为执行顺序,最先注册者离客户端最近,因此耗时统计中间件应排在最前以覆盖全部处理时间。典型设计是外层异步中间件读取 body 并计算耗时,写入 `X-Duration-ms` 等响应头;内层纯计算中间件生成唯一 ID 挂载到 `request.state` 和 `X-Request-ID`。实现需注意:`await request.body()` 会消耗请求体但 Starlette 缓存可重复读取,不适用于大文件上传;`def` 中间件不应包含同步阻塞调用;中间件数量应保持克制。

link-aepan49i
meytao 头像
meytao

FastAPI系列-08-异常处理

FastAPI 通过全局异常处理机制分离异常抛出与响应构造,避免每个路由处理器重复编写 try/except。异常沿异步栈冒泡,框架根据方法解析顺序匹配最具体的处理器,支持装饰器或字典两种注册方式,最终合并到同一个分派链。处理器函数可以是 `def` 或 `async def`,框架自动调度。核心实践是将 `HTTPException` 及其它业务异常直接抛出,在全局处理器中统一转换为一致的 JSON 结构。尤其针对 SQLAlchemy 的 `IntegrityError`,通过解析 `exc.orig.args[0]` 获取 MySQL 错误码,精确映射为 409、422 等 HTTP 状态码,使数据层无需捕获异常,错误响应的格式和状态码在整个应用中保持一致。

link-aepan49i
meytao 头像
meytao

FastAPI系列-07-自定义响应数据格式

FastAPI 默认的 JSON 响应能满足多数场景,但在需要固定响应外壳或提升序列化吞吐时,可直接返回 `JSONResponse` 或更快的 `ORJSONResponse`。显式使用响应类会绕过 `response_model` 的校验与过滤,开发者需自行确保数据安全。响应类的选择(标准库编码 vs. `orjson` 编码)与 handler 的函数形态(`async def` 取决于 I/O 操作)完全正交,可自由组合。`ORJSONResponse` 通常更快,但性能收益需结合实际瓶颈评估;若查询延迟占比高,更换编码器收效甚微。ORM 中设置 `expire_on_commit=False` 可保留已加载属性,避免序列化时触发额外查询,但关联字段仍需在查询时显式预加载。面对大数据响应,最终优化方向应从更快编码转向分页或流式传输。

link-aepan49i
字·兮·书 头像
字·兮·书

在AI随手可问的时代,博客站的走向应该如何?

AI的贴身护航 现在AI的发展每天一个样,样样不重复,越来越快,以前大家碰见搞不懂的问题第一时间就是找教程,翻翻大佬的博客文章看看有没有人踩过坑找找灵感什么的,现在呢,不懂的直接问AI,一篇详细的教程文章就在几秒钟之内出来了,有详情有配图,看不懂的还可以继续问,随时解读,谁还去找博客看文章呢?人力有时穷,怎么打的过机械脑子就是很多博客需要考虑的一点点了。 方向 AI可以给我们解答问题,但是有一点目前还是代替不了的,无法解读走过的经验,踩过的坑,它现在还只是它,不是他或她,文章内容需要转变,但是要真写多少专业的有经验的东西,其实对大部分人来说都很难,时间,语言组织等等,包括有时候需要答疑毕竟不是谁都能看得懂。 寻找方向 想了很久久,觉得闭门造车不实际,想大家探讨一下,在此发出征集,如果你的博客是自己开发的,或者魔改的,同时对于博客未来的方向感到一点点相似的迷茫,可以来共同交流一下,未来已来,希望大家都可以跟上。 QQ群:984571530

link-v4eo5cxd
meytao 头像
meytao

FastAPI系列-06-请求与响应

FastAPI 通过 Pydantic 模型分别为请求与响应定义独立的契约,不共用同一套模型。请求模型(如 BookCreate)只包含客户端可写字段,过滤掉 id 等由服务端生成的属性;响应模型(如 BookOut)只暴露可读字段,防止数据库内部列外泄。框架内部有两条独立管线:请求体先经请求模型校验,通过后进入 handler;handler 返回的数据再经由 `response_model` 强制校验与字段过滤,最终序列化为 JSON。Pydantic v2 通过 `from_attributes=True` 可直接从 ORM 实例读取属性,避免手动转换。使用中需注意:列表接口宜用轻量摘要模型,序列化阶段须确保关联字段已加载以防 N+1 查询,同时应显式声明 `response_model` 而非仅靠返回类型注解,以确保字段过滤生效。

link-aepan49i
Young143 Blog 头像
Young143 Blog

让AI管理你的博客:我开发了一款Typecho JSON API插件

让AI从「帮你写文章」进化到「帮你管博客」——一个插件,20+个API,全量覆盖痛点:当AI遇上Typecho最近 AI 写博客越来越流行了。我自己平时用 Typecho 搭了博客,平时写文章、记笔记,零零碎碎积累了不少内容。时间一长就发现,管理博客本身变成了一件烦心事——发新文章要登录后台、改个分类要点好几下、审评论要一条条翻。这些重复操作如果能直接交给 AI 来做,能省下不少精力。但问题是:Typecho 缺乏一个好用的 JSON API。自带的 XMLRPC 接口不仅操作有限,而且存在一些兼容性问题,很多场景根本覆盖不到。想让 AI 全面地管理博客——发布文章、审核评论、管理分类标签、处理媒体文件——没有一套完善的 API 是行不通的。所以我想,不如自己动手。插件诞生:TypechoAgent与其在现有接口上修修补补,不如从零构建一套完整的 JSON API,直接操作数据库,绕过上层抽象的所有限制。于是就有了 TypechoAgent,一个让 AI(或任何外部程序)通过 JSON API 管理 Typecho 博客的插件。设计思路很简单在 Typecho 中注册一个路由 POST

link-exfl8tok