在 Gemini、DeepSeek 的帮助下,构建了一个简单的 Next.js 项目,用来追踪 Next.js 的服务端渲染和客户端渲染流程,从而加深对 Next.js 服务端渲染(Server-Side Rendering,SSR)流程的理解,也进一步学习掌握客户端渲染与服务端渲染的区别。
python httpx-oauth 源码分析
一直想学习下 OAuth2(Open Authorization) 协议,最近看 fastapi-users 的源代码,发现它们使用 HTTPX OAuth 来提供 OAuth2 授权支持,于是就顺便研究了下 httpx-oauth 的源码。
2025 年度总结:AI 时代
2025 年又快过去了,这一年无论是在个人技术领域,还是生活方面,都发生了很多变化。在 AI 浪潮奔涌的当下,记录下此刻的心路历程,未来再回看这篇年度总结时,或许会生出别样的感悟。
流畅的 Python 第 2 版(24):类元编程
类元编程指在运行时创建或定制类的技艺。在 Python 中,类是一等对象,因此任何时候都可以使用函数新建类,无须使用 class 关键字。类装饰器也是函数,不过能够审查、修改,甚至把被装饰的类替换成另一个类。最后,元类是类元编程最高级的工具:使用元类可以创建具有某种特质的全新类,例如前面讲过的抽象基类。
流畅的 Python 第 2 版(23):属性描述符
学会描述符之后,不仅有更多的工具集可用,还能对 Python 的运作方式有更深入的理解,不得不由衷赞叹 Python 设计的优雅。描述符是对多个属性运用相同存取逻辑的一种方式。例如,Django ORM 和 SQLAlchemy 等 ORM 中的字段类型就是描述符,其把数据库记录中字段里的数据与 Python 对象的属性对应了起来。
流畅的 Python 第 2 版(22):动态属性和特性
在 Python 中,数据属性和方法统称属性(attribute)。其实,方法是可调用的属性。动态属性(dynamic attribute)的接口与数据属性一样(obj.attr),不过按需计算。这与 Bertrand Meyer 所说的统一访问原则(Uniform Access Principle)相符。
流畅的 Python 第 2 版(21):异步编程
这篇文章将介绍 Python 中的异步编程,这些内容建立在之介绍的可迭代对象和生成器、上下文管理器、以及并发编程一般概念等基础之上。
流畅的 Python 第 2 版(20):并发执行器
对于线程,应用程序开发者遇到的使用场景,99% 的情况下只需知道如何派生一堆独立的线程,然后用队列收集结果。这篇文章讨论实现了 concurrent.futures.Executor 接口的类,这些类对上面这种使用场景进行了封装,使用起来特别容易,不仅能用于线程,而且还能用于进程处理计算密集型任务。同时还会介绍 future,这种对象表示异步执行的操作,类似于 JavaScript 中的 promise。
流畅的 Python 第 2 版(19):Python 并发模型
并发指同时处理多件事,并行指同时做多件事。二者不同,但有联系。一个关于结构,一个关于执行。并发用于制定方案,用来解决可能(但未必)并行的问题。并行是并发的一种特殊情况。所有并行系统都是并发的,但不是所有并发系统都是并行的。
这篇文章将展示 Python 的 3 种并发方式:线程、进程和原生协程。
流畅的 Python 第 2 版(18):with、match 和 else 块
这篇文章学习一些在其他语言中不常见的控制流功能,包括 with 语句和上下文管理器协议,匹配模式的 match/case 以及 for、while 和 try 语句中的 else 子句。