给定一个由几个值组成的配置,比如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文件。我基本上都在寻找相当于谷歌应用程序引擎。
答案 0 :(得分: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()
答案 1 :(得分: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()