wai*_*ani 2 google-app-engine app-engine-ndb
我有两个模拟用户Jo和Sam以及各自的ID 117138609372751079516和144229817858159123282.
该应用程序具有以下实体:
class MockEntity(ndb.Model):
ownerId = ndb.StringProperty(default=users.get_current_user().user_id())
Run Code Online (Sandbox Code Playgroud)
当两者都在同一时间登录,要么用户保存/放实体首次,物业"OWNERID"随机与填充任何用户的ID:117138609372751079516或144229817858159123282
使用pre_put_hook似乎解决了这个问题:
def _pre_put_hook(self):
if not self.ownerId:
self.ownerId = users.get_current_user().user_id()
Run Code Online (Sandbox Code Playgroud)
我已经解决了我的直接问题,但为什么一开始就是这个问题?这已经在开发和生产中进行了测试,由约50名测试人员组成.大约40%的人可以看到不属于他们的实体.
小智 5
问题可能是由于ownerId仅在第一次MockEntity为每个App Engine运行时实例创建类时设置的默认值.因此,当新的App Engine实例加载时,第一个用户将设置默认值以将类加载到Python解释器中.
请参阅Gotcha - Python中的此经典问题的可变默认参数和App Engine NDB Gotcha PickleProperty默认值,以解释NDB中的相同情况.
| 归档时间: |
|
| 查看次数: |
148 次 |
| 最近记录: |