我希望我的Django视图是原子的。我的意思是,如果视图中有2DB写,我想要0写或者2写。
例如:
def test_view(request):
''' A test view from views.py '''
MyClass.objects.create()
raise Exception("whatever")
MyClass.objects.create()
我在文档中发现的似乎是有希望的:
在web上处理事务的一个常见方法是将每个请求包装在一个事务中。在要为其启用此行为的每个数据库的配置中,将ATOMIC_REQUESTS设置为True。 它是这样工作的。在调用视图函数之前,Django启动一个事务。如果生成的响应没有问题,Django将提交事务。如果视图产生异常,Django将回滚事务。
但是,即使我设置了ATOMIC_REQUESTS = True
,在调用test_view()
时,也会创建第一个MyClass对象!我遗漏了什么?
注:我使用Django 1.7
发布于 2014-12-07 10:30:38
ATOMIC_REQUESTS是数据库连接设置dict的一个属性,而不是顶级设置.因此,例如:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'mydatabase',
'USER': 'mydatabaseuser',
'PASSWORD': 'mypassword',
'HOST': '127.0.0.1',
'PORT': '5432',
'ATOMIC_REQUESTS': True,
}
}
https://stackoverflow.com/questions/27346003
复制相似问题