Python 属性访问为何会绕路:描述符协议、查找顺序与可复用校验

Python 描述符与属性访问封面

看似普通的 obj.name,背后不一定只是从字典里取值。property、实例方法、ORM 字段和许多校验框架都借助描述符协议介入属性访问。理解这条查找链,能解释“实例里明明有同名属性,为何读到的却是另一个值”,也能帮助我们写出可复用、行为明确的字段组件。

Read More

用 Web Locks API 协调多个标签页:从互斥操作到选主

多个浏览器标签页通过共享锁协作的封面

同一个站点打开多个标签页后,自动保存、刷新令牌、清理本地缓存等任务可能同时运行。给每个标签页加一个 setInterval 并不能解决竞态:它们共享存储,却各自拥有定时器。Web Locks API 提供了一个浏览器原生的命名锁,让同源标签页围绕同一个资源排队,适合处理“同一时刻只能有一个页面执行”的本地协作问题。

Read More

Service Worker 缓存更新别靠运气:版本、激活与回滚边界

Service Worker 缓存版本管理示意图

Service Worker 让网页拥有离线能力,也带来一种很特别的故障:服务器已经发布了新代码,用户却一直运行旧页面。原因通常不是 CDN 没刷新,而是旧的 Service Worker 仍然控制着页面,或者新 Worker 激活后还保留着旧缓存。把缓存当成“下载文件夹”很容易失控;更稳妥的做法是把它当成有版本、有生命周期、可回滚的数据副本。

Read More

别让服务器替攻击者探路:SSRF 防护与出站访问控制

SSRF 防护与受控出站访问

“填写图片 URL 生成缩略图”“输入回调地址测试 Webhook”都是常见功能。危险之处在于,真正发起请求的是位于可信网络里的服务器:攻击者只要控制目标地址,就可能借它访问云元数据、管理后台或只监听内网的服务。这类问题称为服务端请求伪造(SSRF),防线不能只靠一条 URL 正则。

Read More

Python dataclass 设计指南:默认值、frozen、slots 与序列化边界

Python dataclass 设计封面

在 Python 项目里,配置项、消息、数据库记录经常先用字典传递,后来才发现默认值散落、字段拼写无人检查、调试输出也不稳定。dataclasses 提供了一条轻量的建模路径:用类型注解描述字段,让构造、比较和调试代码自动生成,同时把可变性和内存布局这些取舍显式化。

Read More