2

给定一个由几个值组成的配置,比如 displayName 和startingDate,大部分时间都是不变的,但用户也可以通过谷歌应用程序的子页面进行编辑,那么存储和修改此配置的最佳方式是什么?

目前我有这样的事情:

class Configuration(ndb.Model):
    displayName = ndb.StringProperty()
    starting = ndb.DateTimeProperty()

并像这样修改它:

allConfigurations = Configuration.query().fetch(1)
current = None
try:
    current = allConfigurations[0]
except:
    current = Configuration()
current.displayName = self.request.get('newDisplayName')
current.starting = self.request.get('newStartingDate')
current.put()

基本上这会检索所有配置,将结果限制为只有一个(或者如果数据存储为空,则创建一个新配置),修改值并将其写回数据存储。但对我来说,这似乎是一种复杂的首选方式。

编辑: 在另一个环境中,我可能会为此使用一个 .ini 文件。我基本上是在寻找与谷歌应用引擎相当的东西。

4

2 回答 2

2

AFAIK 没有任何其他方法可以实现您想要的,尽管我可能会这样做更像..

current = Configuration.query().get() or Configuration()
current.displayName = self.request.get('newDisplayName')
current.starting = self.request.get('newStartingDate')
current.put()

但我无法帮助自己,必须允许备用配置..

id = self.request.get('id') or 'default'
config = Configuration.get_by_id(id) or Configuration(id = id)
config.displayName = self.request.get('newDisplayName')
config.starting = self.request.get('newStartingDate')
config.put()
于 2013-08-09T10:13:09.347 回答
1

在 GAE 上,文件系统是只读的,这意味着您不能写入配置文件,并且您的方式是正确的方式。

如果您想简化代码,您可以使用字符串 ID 并使用方法获取它get_or _insert()

current = Configuration.get_or_insert('current')
current.displayName = self.request.get('newDisplayName')
current.starting = self.request.get('newStartingDate')
current.put()
于 2013-08-09T10:14:25.870 回答