python - Flask app config.py vs dotenv 访问环境变量

标签 python flask

您好,我对编程和构建我的第一个 Flask 项目还比较陌生,我一直无法弄清楚我是否应该更喜欢使用 dotenv 来访问环境变量。/load_dotenv或从 config.py 文件中使用它们。

我知道配置路由更灵活,但我的问题专门与环境变量有关。

这里有最佳实践吗? [我正在构建一个将在外部托管的简单应用]

最佳答案

最佳实践规定,不应将任何 secret 值硬编码到项目中持续存在或 checkin 源代码管理的任何文件中。您的配置文件很可能保存在源代码管理中,因此它不应存储 secret ,而应从应用程序执行时设置的环境变量中加载它们。例如,假设您正在配置 SMTP 中继:

MAIL_PORT 是一个非 secret 且不太可能更改的值,因此很适合在您的配置文件中设置。

MAIL_PASSWORD 是您不希望保存在项目存储库中的 secret 值,因此应从主机的环境变量中加载它。

在此示例中,您的配置文件可能包含如下所示的条目:

MAIL_PORT = 465
MAIL_PASSWORD = os.environ.get('MAIL_PASSWORD')

除了评估配置值是否是 secret 之外,还要考虑该值更改的频率以及进行更改的难度。任何硬编码到配置文件中的内容都需要更改文件并向源代码管理添加新的提交,甚至可能触发完整的 CI/CD 管道过程。如果该值是从环境变量加载的,则可以通过简单地停止应用程序、将新值导出为环境变量并重新启动应用程序来更改该值。

Dotenv 文件只是将多个变量组合在一起并自动加载它们以供您的配置读取的便利工具。 .env 文件并不总是被使用,因为当应用程序被另一个负责启动或缩放应用程序的系统调用或处理时,这些值可以手动导出。不要将 .env.flaskenv 文件 checkin 源代码管理。

关于python - Flask app config.py vs dotenv 访问环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62071829/

相关文章:

python - 为什么 python 列表理解控制循环嵌套在它们当前的形式中?

python - AWS 上的 Streamlit : serverless options?

python - 安装Flask项目打不开setup.py

python - 如何将上传的图像传递给 Flask 中的 template.html

python flask 和 heroku webapp ERR_SSL_PROTOCOL_ERROR

python - 如何检查函数/方法/类是否是 Python 内置的?

python - 如何从 np.genfromtxt 添加的 ndarray 中删除 'b' 字符

python - 将元素形成 numpy 数组作为另外两个 numpy 数组时出现广播错误

python - 对无响应的 Flask 路由的调用设置超时(更新)

python - 从客户端接收 'utf-8' 时出现问题