存储的API密钥和配置变量在静态文件是通常总是一个坏主意,有几个原因:
- 努力更新:你需要以更新部署新的应用程序值
- 不安全:你可能会提交到版本控制系统并没有回来的路上
- 不要放大:很多时候你必须为不同的域
那么,为什么不存储直接从所有这些值不同的密钥的安全十分开始在数据存储,尤其是当它实际上是如此容易得多,这里是如何:
所有你必须做的是为您的配置值创建一个新模型,并且只有一条记录。通过使用NDB,您可以开箱即用缓存,并且由于此配置文件的性质,您甚至可以对每个正在运行的实例进行缓存,以避免定期读取数据存储区。
class Config(ndb.Model):
analytics_id = ndb.StringProperty(default='')
brand_name = ndb.StringProperty(default='my-awesome-app')
facebook_app_id = ndb.StringProperty(default='')
facebook_app_secret = ndb.StringProperty(default='')
@classmethod
def get_master_db(cls):
return cls.get_or_insert('master')
我也猜你已经有一个文件,最有可能被称为config.py
,你有一些常量像这样的:
PRODUCTION = os.environ.get('SERVER_SOFTWARE', '').startswith('Google App Engine')
DEVELOPMENT = not PRODUCTION
如果不创建一个或者你不只是内容添加到该文件还有:
import model # Your module that contains the models
CONFIG_DB = model.Config.get_master_db()
终于可以说,无论在您的应用程序(导入后阅读,你可以简单地做你的配置值当然):
config.CONFIG_DB.brand_name
从现在起,你甚至不必创建任何特殊形式来更新这些值(建议虽然),因为你可以从本地管理控制台或仪表板在生产上。
请记住,如果您要将该记录存储在本地变量中,则必须在更新值后才能重新启动instances以查看更改。
上述所有你可以在行动中看到它,我叫gae-init开源项目之一。
我使用settings.yaml文件进行所有自己的设置。我自己并没有遇到问题。我使用单独的部分进行测试,产品等...因此每个部分都是独立的。这样我就不会交换/移动settings.yaml。 –
我使用appengine_config:lib_config默认和挂钩:https://developers.google.com/appengine/docs/python/tools/appengineconfig#Python_Module_Configuration – voscausa