什么是在Google AppEngine(python)中存储配置的好地方

Pet*_*mit 14 python google-app-engine configuration-files

我正在制作一个Google AppEngine应用程序,我怀疑是否应该存储(敏感)配置数据,如凭据.

我应该为配置创建一个bigtable实体,还是有另一种建议的方式来存储它.

Nic*_*son 18

如果您可以将它们嵌入到源代码中,那么您可以这样做,但如果您需要它可以动态配置,那么数据存储就是您的选择.您可以通过在本地内存中缓存它们来避免在每个请求上获取设置.这是一个帮助类:

class Configuration(db.Model):
  _INSTANCE = None

  @classmethod
  def get_instance(cls):
    if not cls._INSTANCE:
      cls._INSTANCE = cls.get_or_insert('config')
    return cls._INSTANCE
Run Code Online (Sandbox Code Playgroud)

只需使用您需要的任何配置值(或修改类本身)将其子类化.由于加载的代码在请求之间保持不变,因此您只需要为每个应用程序实例执行一次提取 - 但如果您希望能够动态更新配置,则可能需要构建超时.

如果要在有限的时间内缓存内容,最好的选择就是在获取时存储时间戳:

class Configuration(db.Model):
  CACHE_TIME = datetime.timedelta(minutes=5)

  _INSTANCE = None
  _INSTANCE_AGE = None

  @classmethod
  def get_instance(cls):
    now = datetime.datetime.now()
    if not cls._INSTANCE or cls._INSTANCE_AGE + cls.CACHE_TIME < now:
      cls._INSTANCE = cls.get_or_insert('config')
      cls._INSTANCE_AGE = now
    return cls._INSTANCE
Run Code Online (Sandbox Code Playgroud)

  • @Franck @systempuntoout通过演示更新了答案. (2认同)

mor*_*aes 10

将它们存储在模块中.你可以简单,就像有一个config.py模块,说:

AMAZON_KEY = 'XXXX'
Run Code Online (Sandbox Code Playgroud)

然后使用:

import config
service = my_amazon_service(config.AMAZON_KEY)
Run Code Online (Sandbox Code Playgroud)

或者有一个稍微复杂的配置对象,允许您为您的应用程序,命名空间配置键等具有合理的默认值.