0
我有一个GAE模型,有几个方法用事务更新实体。这样的事情:用事务更新实体的通用方法
class MyModel(ndb.Model):
@staticmethod
@ndb.transactional
def update_foo(ekey):
entity = ekey.get()
entity.foo = "x"
entity.put()
@staticmethod
@ndb.transactional
def update_bar(ekey):
entity = ekey.get()
entity.bar = "y"
entity.put()
为了清理我的代码,我想,我可以集中更新交易的代码。事情是这样的:
class MyModel(ndb.Model):
@staticmethod
@ndb.transactional
def update_tx(ekey, **kwargs):
entity = ekey.get()
for prop, value in kwargs.iteritems():
setattr(entity, prop, value)
enitty.put()
def update_foo(self):
self.update_tx(self.key, foo="x")
def update_bar(self):
self.update_tx(self.key, bar="y")
这是一个合理的想法,或者是否有这种做法的危险,我还没有考虑?
嗨,亚历克斯,感谢您的见解。我正在努力弄清楚交易中需要什么以及交易之前会有什么。例如,tt似乎可以在事务之前完成验证表单数据,但其他操作不太清楚。 –
当然可以。您将始终在模型中进行一些验证,实际上ndb允许您在属性上设置验证器函数。我实际上正在重构我如何进行验证,因为许多规则必须能够被管理员/客户服务代表改写(即用户只能将日期时间设置为将来,但需要管理员能够支持事物)。我现在要做的路线是将数据完整性验证放入模型/事务中,并根据模型外的权限进行验证(以及时间戳 - >日期时间检查)。 – Alex