Google app engine 覆盖保存、放置、获取等。。。googleappengine中的方法
是否可以在Google应用程序引擎中覆盖db.Model的methids? 我想声明beforeSave、afterSave方法等。。创建自动标签系统 我知道有钩子,但在我看来,解决这个问题的方法是错误的:)Google app engine 覆盖保存、放置、获取等。。。googleappengine中的方法,google-app-engine,overriding,Google App Engine,Overriding,是否可以在Google应用程序引擎中覆盖db.Model的methids? 我想声明beforeSave、afterSave方法等。。创建自动标签系统 我知道有钩子,但在我看来,解决这个问题的方法是错误的:) 谢谢 是的,可以覆盖这些方法。看看这个。钩子模型类看起来是这样的: class HookedModel(db.Model): def before_put(self): pass def after_put(self): pass def put(self,
谢谢 是的,可以覆盖这些方法。看看这个。钩子模型类看起来是这样的:
class HookedModel(db.Model):
def before_put(self):
pass
def after_put(self):
pass
def put(self, **kwargs):
self.before_put()
super(HookedModel, self).put(**kwargs)
self.after_put()
阅读博客,了解如何处理db.put()
方法
您可能还对感兴趣。我发布了对jbochi的HookedModel类的扩展,以便在从
db.put()
和\u async
函数族调用时,可以正确调用put之前的和put之后的方法
参见我试图通过@jbochi改进答案:
根据,put()
应该返回一个键
,因此应该传递库中的返回值
db.Model.save()
,虽然不推荐使用,但(a)有时仍然使用,(b)是put()
的同义词,(c)显然不是由put()
直接调用的,因此应该手动处理
修订守则:
class HookedModel(db.Model):
def before_put(self):
pass
def after_put(self):
pass
def put(self, **kwargs):
self.before_put()
result = super(HookedModel, self).put(**kwargs)
self.after_put()
return result
def save(self, **kwargs):
self.before_put()
result = super(HookedModel, self).save(**kwargs)
self.after_put()
return result
如果您希望使用monkeypatching,或者Chris Farmiloe关于使用异步方法的回答,您仍然应该阅读。我确实需要更快地进入。)put()应该返回一个键-我已提交了对此答案的编辑以添加该键。@wodow,您不能编辑其他人的代码来添加您自己的代码,尤其是如果它是可接受的答案。如果你真的觉得你有什么要补充的,那么要么添加你自己的答案,要么让答案作者调整他们的代码。我已经回滚了您的编辑。@Sheridan,好的,对不起!(不是维基)