博客
部分文章提供中英文版本;其他文章保留原文,卡片上会标明正文语言。
- 站点重建这个技术博客
重建这个技术博客
2026-08-27 | 站点 中文
用静态页面和 Git 管理技术文章与项目笔记。
- 笔记这个网站会写些什么
这个网站会写些什么
2026-08-26 | 笔记 中文
技术笔记、课程学习与项目案例的持续更新索引。
- DevOps容器化 Python 服务:开发服务器与生产进程
容器化 Python 服务:开发服务器与生产进程
2021-03-25 | DevOps 中文
把启动命令、健康检查和反向代理边界写清楚。
- DevOpsDocker 环境变量与密钥:配置可以注入,密钥不能烘焙
Docker 环境变量与密钥:配置可以注入,密钥不能烘焙
2021-03-18 | DevOps 中文
区分非敏感运行参数与必须由密钥管理系统提供的值。
- DevOpsDocker 数据卷:容器可替换,状态应独立
Docker 数据卷:容器可替换,状态应独立
2021-03-14 | DevOps 中文
应用容器适合无状态运行;需要保留的数据必须有明确的存储与备份边界。
Docker CMD 与 ENTRYPOINT:默认命令如何组合
2021-03-11 | DevOps 中文
用 exec form 保持参数覆盖和进程信号处理可预测。
Docker 构建上下文与 .dockerignore
2021-03-08 | DevOps 中文
镜像构建只应看到需要的文件,避免把缓存、密钥和无关文件送入 Docker daemon。
Dockerfile 的 COPY 与 ADD:默认选择 COPY
2021-03-05 | DevOps 中文
COPY 的行为更直白;ADD 的额外能力只有在确实需要时才使用。
- DevOps现代 Dockerfile:从指令记忆到可复现镜像
现代 Dockerfile:从指令记忆到可复现镜像
2021-03-01 | DevOps 中文
保留 Dockerfile 基础概念,但改用可复现、较小且不携带机密的构建方式。
- DevOpsDocker 镜像标签:保留可追溯元数据,不暴露个人信息
Docker 镜像标签:保留可追溯元数据,不暴露个人信息
2021-02-20 | DevOps 中文
使用 OCI 风格标签标记源码、版本与说明,避免把私人邮箱写进镜像。
- DevOpsDjango 项目配置:环境隔离、最小权限与可观测性
Django 项目配置:环境隔离、最小权限与可观测性
2021-01-10 | DevOps 中文
从商城项目启动笔记中保留配置要点,并替换过期依赖和不安全的默认做法。
- 后端列表接口契约:分页、排序与筛选必须一起设计
列表接口契约:分页、排序与筛选必须一起设计
2020-11-28 | 后端 中文
稳定的列表 API 让后台表格和数据导出都能可靠工作。
- 数据工程后台指标:先定义日活、下单用户和新增用户
后台指标:先定义日活、下单用户和新增用户
2020-11-25 | 数据工程 中文
图表之前先固定指标口径、时区、去重规则与数据延迟。
- 后端后台 API 设计:认证、授权、上传与可审计删除
后台 API 设计:认证、授权、上传与可审计删除
2020-11-20 | 后端 中文
把管理后台、权限表和图片上传笔记收敛为可落地的接口设计原则。
- 后端后台文件上传:验证内容,不只看扩展名
后台文件上传:验证内容,不只看扩展名
2020-11-12 | 后端 中文
上传接口需要限制体积、验证真实文件类型、隔离存储与控制访问。
- 后端Django RBAC:用户、组与权限如何协作
Django RBAC:用户、组与权限如何协作
2020-11-02 | 后端 中文
用角色聚合权限,用服务端检查保护每个后台操作。
- DevOps找回本地测试数据库连接:不要依赖已保存密码
找回本地测试数据库连接:不要依赖已保存密码
2020-10-25 | DevOps 中文
一次本地测试环境排查带来的经验:确认归属、重置访问、最小权限与可追溯配置。
- DevOpsCelery 异步任务:把慢操作移出请求,但保留可靠性
Celery 异步任务:把慢操作移出请求,但保留可靠性
2020-10-20 | DevOps 中文
邮件、生成报表和通知适合异步;关键数据库写入仍应先在事务中完成。
- DevOpsDjango 日志:可定位问题,也不泄露数据
Django 日志:可定位问题,也不泄露数据
2020-10-10 | DevOps 中文
日志要有等级、请求关联和轮转策略;敏感输入必须脱敏。
- 后端Django 模型基类:统一审计字段,不隐藏领域语义
Django 模型基类:统一审计字段,不隐藏领域语义
2020-09-30 | 后端 中文
抽取 created_at、updated_at 等共性字段,同时让关键业务状态仍显式存在。
- 系统设计站内搜索:数据库查询与搜索引擎的分工
站内搜索:数据库查询与搜索引擎的分工
2020-09-20 | 系统设计 中文
搜索引擎用于检索体验,不取代订单、库存等强一致业务数据库。
- 后端Django 缓存与 Redis:缓存不是数据库替身
Django 缓存与 Redis:缓存不是数据库替身
2020-09-10 | 后端 中文
缓存用来降低读取成本,但必须接受过期、丢失和失效策略。
- 后端Django 邮箱验证:凭据留在环境变量,令牌留在服务端
Django 邮箱验证:凭据留在环境变量,令牌留在服务端
2020-09-05 | 后端 中文
邮箱验证可以公开为流程设计,但 SMTP 账号与授权码不应进入代码或文章。
- 系统设计电商下单一致性:库存、订单与购物车的事务边界
电商下单一致性:库存、订单与购物车的事务边界
2020-09-01 | 系统设计 中文
将商城项目笔记中的超卖处理与订单写入流程整理为可验证的一致性方案。
- 后端Django 库存并发:避免超卖的两种思路
Django 库存并发:避免超卖的两种思路
2020-08-28 | 后端 中文
库存检查与扣减必须在同一数据库操作或短事务内完成。
- 后端Django transaction.atomic:把一项业务写入作为整体
Django transaction.atomic:把一项业务写入作为整体
2020-08-26 | 后端 中文
订单、库存和关联记录等多表写入需要明确的事务边界。
- 系统设计登录后合并购物车:先定义冲突规则
登录后合并购物车:先定义冲突规则
2020-08-18 | 系统设计 中文
合并不是简单拼接;同 SKU、失效商品和数量上限都需要可测试规则。
- 系统设计购物车存储:匿名用户与登录用户的两条路径
购物车存储:匿名用户与登录用户的两条路径
2020-08-10 | 系统设计 中文
购物车的存储选择取决于身份状态、设备同步和结算一致性。
- 后端JSON 与 bytes:序列化边界中的类型错误
JSON 与 bytes:序列化边界中的类型错误
2020-08-08 | 后端 中文
JSON 编码器需要 Python 原生结构,而不是尚未解码的 bytes。
- 后端DRF 日期格式化:展示格式不能改变时间语义
DRF 日期格式化:展示格式不能改变时间语义
2020-08-06 | 后端 中文
API 输出可以友好,但存储、时区和输入格式必须保持明确。
- 后端DRF 状态码:让客户端知道请求发生了什么
DRF 状态码:让客户端知道请求发生了什么
2020-08-04 | 后端 中文
状态码表达协议结果;错误码和消息表达应用语义。
- 后端DRF 对象权限:列表过滤与详情检查缺一不可
DRF 对象权限:列表过滤与详情检查缺一不可
2020-08-01 | 后端 中文
对象级权限不能只依赖详情接口;列表查询也必须从源头缩小范围。
- 后端DRF 分页:让列表接口可预测
DRF 分页:让列表接口可预测
2020-07-28 | 后端 中文
分页不只是前端体验,也是在保护数据库和 API 响应大小。
- 后端DRF 查找字段:pk、slug 与 UUID 的取舍
DRF 查找字段:pk、slug 与 UUID 的取舍
2020-07-24 | 后端 中文
资源详情的 URL 参数应与数据模型和暴露边界一起设计。
- 后端DRF 嵌套序列化:读模型容易,写模型要显式设计
DRF 嵌套序列化:读模型容易,写模型要显式设计
2020-07-20 | 后端 中文
关联对象的输出可以嵌套;写入时必须定义创建、更新和删除语义。
- 后端DRF 校验:从 is_valid 到可读的错误响应
DRF 校验:从 is_valid 到可读的错误响应
2020-07-16 | 后端 中文
把格式校验、跨字段规则和错误返回放在清晰的边界中。
- 后端DRF 字段选项:required、read_only 与 default
DRF 字段选项:required、read_only 与 default
2020-07-12 | 后端 中文
三个容易混淆的 Serializer 字段选项,分别控制输入要求、可写性与缺失值。
- 后端DRF @action:为资源添加非 CRUD 操作
DRF @action:为资源添加非 CRUD 操作
2020-07-08 | 后端 中文
将资源相关但不属于标准 CRUD 的操作建模为显式 action。
- 后端DRF ViewSet 与 Router:资源路由的约定
DRF ViewSet 与 Router:资源路由的约定
2020-07-02 | 后端 中文
用 ViewSet 统一一组资源操作,并理解 Router 自动生成 URL 的边界。
- 后端DRF GenericAPIView:减少 CRUD 重复代码
DRF GenericAPIView:减少 CRUD 重复代码
2020-06-25 | 后端 中文
用通用视图和 Mixin 表达常见资源接口,同时保留查询与权限控制点。
- 后端DRF 中 APIView 与 Response 的职责
DRF 中 APIView 与 Response 的职责
2020-06-20 | 后端 中文
何时从 Django View 切换到 DRF 的 APIView,以及为什么响应应交给 Response。
- 后端Django REST Framework:序列化、校验与保存的边界
Django REST Framework:序列化、校验与保存的边界
2020-06-15 | 后端 中文
把零散的 Serializer 笔记整理为一条可维护的请求处理链,并澄清 create/update 何时需要自定义。
- 后端数据库迁移:模型变了,schema 也必须可追溯
数据库迁移:模型变了,schema 也必须可追溯
2020-06-10 | 后端 中文
迁移文件是数据库结构的版本历史,不是部署时临时执行的手工 SQL。
- 后端Flask 模板与静态资源:服务端渲染的边界
Flask 模板与静态资源:服务端渲染的边界
2020-06-08 | 后端 中文
模板负责展示,输入处理和授权仍由 Python 服务端控制。
- 后端Flask URL Converter:让路径参数先通过类型约束
Flask URL Converter:让路径参数先通过类型约束
2020-06-05 | 后端 中文
路径规则可以表达整数、UUID 等基本约束,但不能代替对象授权。
- 后端SQLAlchemy 关系与事务:一致性优先于便利
SQLAlchemy 关系与事务:一致性优先于便利
2020-06-02 | 后端 中文
建立关系模型时,先定义生命周期、删除语义和事务边界。
- 后端SQLAlchemy 2.x 查询:select 与 Session.scalars
SQLAlchemy 2.x 查询:select 与 Session.scalars
2020-05-25 | 后端 中文
从旧式 Model.query 迁移到显式 select 和短生命周期 Session。
- 后端SQLAlchemy 新增记录:对象写入与测试数据边界
SQLAlchemy 新增记录:对象写入与测试数据边界
2020-05-22 | 后端 中文
使用 Session 管理插入事务,并让示例账户保持不可识别。
- 后端Flask 上下文与 Hooks:请求级资源如何收尾
Flask 上下文与 Hooks:请求级资源如何收尾
2020-05-18 | 后端 中文
把追踪、数据库会话和清理放在正确的请求生命周期位置。
- 后端Flask Cookie 与 Session:浏览器状态的安全边界
Flask Cookie 与 Session:浏览器状态的安全边界
2020-05-11 | 后端 中文
Cookie 能被客户端保存,不代表客户端可以被信任。
- 后端Flask JSON 响应与错误处理
Flask JSON 响应与错误处理
2020-05-05 | 后端 中文
为成功和失败响应建立稳定结构,同时避免泄露内部异常。
- 后端Flask 请求输入:先解析,再校验,再执行业务
Flask 请求输入:先解析,再校验,再执行业务
2020-04-28 | 后端 中文
避免把 request.json 当作可信字典,建立清晰的 API 输入边界。
- 后端Flask Blueprint:按业务能力组织路由
Flask Blueprint:按业务能力组织路由
2020-04-22 | 后端 中文
Blueprint 是模块化工具,不是权限边界;接口策略仍应在请求处理中明确。
- 后端Flask 应用工厂:把初始化从模块副作用中移开
Flask 应用工厂:把初始化从模块副作用中移开
2020-04-15 | 后端 中文
使用 create_app 让测试、配置切换和扩展初始化更清楚。
- 后端Flask API 基础:应用发现、错误处理与数据库会话
Flask API 基础:应用发现、错误处理与数据库会话
2020-04-10 | 后端 中文
将 Flask、Flask-RESTful 和 SQLAlchemy 学习笔记统一为更贴近当前项目的 API 基线。
- 数据工程可复现 Notebook:从临时实验到可交付分析
可复现 Notebook:从临时实验到可交付分析
2020-03-01 | 数据工程 中文
Notebook 需要固定依赖、可重跑顺序和数据输入说明,才能成为可靠资产。
- 数据工程Pandas 与 Excel:导出供人审阅,不等于数据建模
Pandas 与 Excel:导出供人审阅,不等于数据建模
2020-02-05 | 数据工程 中文
Excel 文件适合交付和复核,但类型、公式和工作表约束需要明确。
- 数据工程Pandas 中文文本与编码:把编码当作输入契约
Pandas 中文文本与编码:把编码当作输入契约
2020-01-12 | 数据工程 中文
读取失败或乱码通常不是 Pandas 问题,而是文件编码与数据来源没有被说明。
- 数据工程Pandas Top N:nlargest 与 nsmallest 的正确前提
Pandas Top N:nlargest 与 nsmallest 的正确前提
2019-12-02 | 数据工程 中文
快速取极值前,先处理空值、类型和并列排序。
- 数据工程Pandas 列操作:新增、删除与重命名时保留数据契约
Pandas 列操作:新增、删除与重命名时保留数据契约
2019-11-28 | 数据工程 中文
列变更看似简单,但会影响下游 schema、类型与空值处理。
- 数据工程Pandas 数据导入导出:CSV、TSV、Excel 与安全边界
Pandas 数据导入导出:CSV、TSV、Excel 与安全边界
2019-11-20 | 数据工程 中文
从格式笔记中提炼一套可复现的数据读取、校验和输出实践。
- 数据工程CSV 与 TSV:简单表格交换的最小约定
CSV 与 TSV:简单表格交换的最小约定
2019-11-18 | 数据工程 中文
CSV 和 TSV 可以公开分享,但编码、分隔符、类型和缺失值必须写清楚。