0
我有几个基于类的视图。django事务atomc装饰器,类视图
其中之一,让我们说,View1可能会调用其他视图来返回响应。
所以我有这样的事情:
class View1(View):
def post(self, request, *args, **kwargs):
# Some logic ...
return View2.as_view()(request) # There are more lines like this calling to other views.
所以View1
有些路线图。基于某些条件,它将请求传递给其他视图以返回响应。
我想在View1
上使用transaction.atomic
装饰器,原子事务是否会应用于我调用的所有视图?即对其他视图的调用不会取消原子请求?
到目前为止,我用下面的方法来装饰视图1:
- 包裹鉴于
transaction.atomic
中的URL。 - 使用
@method_decorator(transaction.atomic)
的post()
方法View1
。
的问题是,使用任何两种方法来设置视图为原子,即使视图1,错误(例外)返回“视图1没有返回HttpResponse对象。”,仍然得到创建的对象。
为什么?
原子数据库事务,以确保数据将被保留,而不是返回一个HTTP响应也不会影响 – Sayse
所以问题是什么时候执行回滚?根据django文档,任何以未捕获异常退出的原子视图都不会创建对象。而不是返回HttpResponse是在Django的例外.. https://docs.djangoproject.com/en/1.9/topics/db/transactions/#django.db.transaction.atomic – user3599803
嗯,你是对的,我一直假设它涉及到数据库错误(道歉),我认为问题是没有返回http响应的错误不在原子块的范围内,因为它调用视图责任的方法来确保它返回一个响应 – Sayse