您的理解是正确的。您所缺少的是,让异常从您的视图代码传播(这与“一直传播到用户”大不相同)在Django中是完全正常的事情。
您可以通过创建500.html模板,覆盖handler500或制作自己的自定义中间件来自定义结果行为。在所有这些标准情况下,使用
ATOMIC_REQUESTS都会做您想要做的事情。
如果您想在视图代码中捕获异常并进行特殊处理,则可以做到这一点,您只需要指定如何手动处理事务即可。使用
ATOMIC_REQUESTS只是为常见情况节省一些样板的一种方法,同时允许您在罕见情况下自己定制行为。



