在Google App Engine上存储应用设置

5 投票
2 回答
564 浏览
提问于 2025-04-15 20:06

我需要为我的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(但也是“只读”)文件。

撰写回答