在阅读exploreflask.com时,我了解到最佳做法是使用两个不同的配置文件,一个用于开发,一个用于生产。我不明白是否要将密钥放在开发或生产配置中。
实例文件夹的私有性使其成为定义您不希望在版本控制中公开的键的理想选择。这些可能包括您应用的密钥或第三方API密钥。
我认为秘密密钥不应该被共享。我应该将密钥放在开发配置或生产配置中,还是应该为每个配置使用不同的密钥?
答案 0 :(得分:4)
在开发配置中放置一个密钥,该密钥将提交给repo。这对开发人员来说很方便,因为他们不必生成一个开始运行应用程序。在生产中,使用生产配置(永远不会提交到仓库),使用唯一的密钥。生产配置应覆盖开发配置。
app = Flask(__name__, instance_relative_config=True)
# default value during development
app.secret_key = 'dev'
# overridden if this file exists in the instance folder
app.config.from_pyfile('config.py', silent=True)
如果您无法在生产中添加私有文件,例如在Heroku上,另一种选择是使用环境变量。如果设置了变量,它将覆盖默认值。
app.secret_key = os.environ.get('SECRET_KEY', 'dev')
答案 1 :(得分:0)
我在生产config.py中混合使用了硬编码值和环境变量:
import os
class Config(object):
SECRET_KEY = os.environ.get("SECRET_KEY")
SQLALCHEMY_DATABASE_URI = os.environ.get("DB_PROD")
SQLALCHEMY_TRACK_MODIFICATIONS = False
在我的开发config.py中,对传送进行了硬编码。