django事务atomc装饰器,类视图
我有几个基于类的视图 在其中一个视图中,我们假设View1可以调用其他视图来返回响应 所以我有这样的想法:django事务atomc装饰器,类视图,django,Django,我有几个基于类的视图 在其中一个视图中,我们假设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在某种程度上是一种
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
装饰器,原子事务会应用于我调用的所有视图吗?i、 e调用其他视图不会取消原子请求吗
到目前为止,我使用以下方法装饰View1:
- 将视图包装在URL中的
中李>transaction.atomic
- 在
的View1
方法上使用了post()
@method\u decorator(transaction.atomic)
为什么?您还可以定义一个基于类的mixin,您可以使用:
class AtomicMixin(object):
def dispatch(self, request, *args, **kwargs):
with transaction.atomic():
return super(AtomicMixin, self).dispatch(request, *args, **kwargs)
class View1(AtomicMixin, View):
def post(self, request, *args, **kwargs):
# Some logic ...
原子用于数据库事务,以确保数据被保留,不返回http响应不会影响这一点。问题是,何时执行回滚?根据django文档,任何以未捕获异常退出的原子视图都不会创建对象。不返回HttpResponse在django中是个例外。。嗯,你是对的,我一直认为它是指数据库错误(抱歉),我认为问题是不返回http响应的错误不在原子块的范围内,因为它是调用视图责任以确保返回响应的方法