1

我运行一个小型视频游戏。每个玩家都有一个具有各种属性的帐户模型。

我最近添加了一个 TextProperty 来跟踪玩家徽章。这些只是在授予时附加到 account.badges 属性的 ASCII 字符。

因为正确是新的,所以大多数帐户模型都没有这个属性。在整个网站的大约 3 个地方,我有一些看起来像这样的代码

if not player.badges:
  player.badges = ""

player.badges += "A"
player.put_memcache()
player.put()

出于某种原因,其中一个玩家徽章不断重置为“”(空字符串)。我一生都无法弄清楚如何或为什么。

我以前没有使用过 TextProperties。是否有一些我不明白的奇怪行为?

TextProperties 不能很好地与内存缓存配合使用吗?

该帐户未重置为某些旧状态,因为其他属性似乎正在正确存储值。它只是这一个TextProperty。

无论如何,我很困惑,并希望有一些新的想法可以帮助我找出问题所在。

问题解答

徽章属性就是这样定义的

class Account(db.Model):
    
    badges = db.TextProperty()
    
    email = db.StringProperty()
    alias = db.StringProperty()
    avatar = db.IntegerProperty()

put_memchche 只是 memcache 集的包装器。

def put_memchche(self):
    memcache.set("account" + self.key().name(), self)
4

1 回答 1

1

AFAIK,文本类似于字符串,区别只是文本可以包含更多字符并且不能被索引。如果您将默认值指定为 "" 我认为您不需要 if 部分。它只发生在一名球员身上吗?你确定在运行时它会命中 player.badges += 'A'。如果您根据您的示例提供更多代码,则调试会更容易,我看不出为什么徽章没有改变的问题。

于 2013-08-25T23:30:27.100 回答