ATOMIC_REQUESTS = True 就是「每个请求一个事务」。它的边界比想象中窄:什么会回滚、什么不会?这篇分别在关闭与开启下打同一组 URL,看表里留下什么。
GET /raise/ → status 500;表里留下: ['middleware-after-view', 'middleware-before-view', 'view-write'] GET /500/ → status 500;表里留下: ['middleware-after-view', 'middleware-before-view', 'view-write'] GET /ok/ → status 200;表里留下: ['middleware-after-view', 'middleware-before-view', 'view-write'] GET /nonatomic/ → status 500;表里留下: ['middleware-after-view', 'middleware-before-view', 'view-write'] 视图里 in_atomic_block → in_atomic_block=False on_commit 回调是否已经执行(请求返回之后): ['on_commit 回调', '视图即将返回响应'] 遍历流式响应时抛出: ValueError 流式响应:表里留下: ['generator-write', 'middleware-after-view', 'middleware-before-view', 'view-write']
GET /raise/ → status 500;表里留下: ['middleware-after-view', 'middleware-before-view'] GET /500/ → status 500;表里留下: ['middleware-after-view', 'middleware-before-view', 'view-write'] GET /ok/ → status 200;表里留下: ['middleware-after-view', 'middleware-before-view', 'view-write'] GET /nonatomic/ → status 500;表里留下: ['middleware-after-view', 'middleware-before-view', 'view-write'] 视图里 in_atomic_block → in_atomic_block=True on_commit 回调是否已经执行(请求返回之后): ['视图即将返回响应', 'on_commit 回调'] 遍历流式响应时抛出: ValueError 流式响应:表里留下: ['generator-write', 'middleware-after-view', 'middleware-before-view', 'view-write']
同一组视图:抛异常、返回 500、正常返回、被 non_atomic_requests 排除、on_commit、流式响应。