在Google App Engine上存储应用设置
我需要为我的Google App Engine项目存储一些设置。目前我有:
class Settings(db.Model):
rate = db.IntegerProperty(default=4)
...
当我想要使用这些设置时:
Settings.get_or_insert('settings')
这样做感觉有点麻烦,所以有没有更好的方法(不使用Django)?
2 个回答
0
在我的项目中,我把配置数据放在数据存储中(每个配置值一条记录),使用的是这个类:
from google.appengine.ext import ndb
class Settings(ndb.Model):
name = ndb.StringProperty()
value = ndb.StringProperty()
@staticmethod
def get(name):
NOT_SET_VALUE = "NOT SET"
retval = Settings.query(Settings.name == name).get()
if not retval:
retval = Settings()
retval.name = name
retval.value = NOT_SET_VALUE
retval.put()
if retval.value == NOT_SET_VALUE:
raise Exception(('Setting %s not found in the database. A placeholder ' +
'record has been created. Go to the Developers Console for your app ' +
'in App Engine, look up the Settings record with name=%s and enter ' +
'its value in that record\'s value field.') % (name, name))
return retval.value
你的应用程序可以这样获取一个值:
API_KEY = Settings.get('API_KEY')
如果数据存储中有这个键对应的值,你就能拿到它。如果没有,系统会创建一个占位符记录,并抛出一个异常。这个异常会提醒你去开发者控制台更新这个占位符记录。
我觉得这样可以省去很多猜测,设置配置值的时候不再迷茫。如果你不确定该设置什么配置值,只需运行代码,它会告诉你!
4
请你说明一下,"感觉笨拙"对你来说是什么意思——我不是很明白。
数据存储是App Engine中保存可更新数据的主要方式(blobstore用于存储大文件,memcache则不保证数据持久性)。如果你的设置无法通过应用程序进行更改,那你当然可以把它们放在自己的自定义.yaml
文件里(或者其他格式,但.yaml
是App Engine自带的配置文件格式……;-);只要记住,从应用程序的角度来看,这些文件都是只读的。YAML格式对App Engine应用程序来说很方便,可以用来解析它们自己的.yaml
(但也是“只读”)文件。