【发布时间】:2017-10-04 20:26:39
【问题描述】:
在 Web 上处理 transactions 的常用方法是将每个请求包装在事务中。在 Django 中,您可以在要启用此行为的每个数据库的配置中将 ATOMIC_REQUESTS 设置为 True。
它是这样工作的。在调用视图函数之前,Django 会启动一个事务。如果生成的响应没有问题,Django 将提交事务。如果视图产生异常,Django 会回滚事务。
虽然这种交易模型的简单性很有吸引力,但它也会在流量增加时变得低效。为每个视图打开一个事务有一些开销。
对于不需要包装在transactions 中的请求,您可以应用@transaction.non_atomic_requests 装饰器。
给定一个带有多个视图类和请求方法的 Django view.py。我该如何决定哪些请求可以成为非原子装饰器的良好候选者?
可能潜伏着什么“陷阱”?
我可以看到 POST 方法无法成为优秀的候选人或任何带有 .save() 的东西,但我还应该注意什么?
【问题讨论】:
标签: python django transactions django-database