如何在Python中将Heroku config vars作为对象使用
Heroku Flask 读取配置变量的正确方法
Heroku 设置的所有配置变量(Config Vars)会在应用部署时自动注入到进程的环境变量中,你在Python代码里通过标准库就能读取,注意区分变量存储格式做对应处理即可:
1. 单字符串密钥直接读取
如果你存的X_App_APIKeys是单条字符串类型的密钥,直接用os模块读取环境变量即可:
import os # 直接读取环境变量值 myapikeys = os.getenv("X_App_APIKeys")
读取后得到的就是你在Heroku后台填写的字符串内容,可以直接用于接口签名校验。
2. 字典/多密钥集合的解析读取
如果你在Heroku后台填的是类似{"service1_key":"xxx", "service2_key":"yyy"}的多密钥集合,要注意:环境变量读取出来默认是字符串类型,不能直接当字典对象调用,需要用标准json模块解析,绝对不要用eval()做转换,避免恶意代码注入风险。
示例代码:
import os import json # 先读字符串值,再解析为字典对象 api_keys_str = os.getenv("X_App_APIKeys") myapikeys = json.loads(api_keys_str) # 解析完成后就可以按字典方式调用,比如 myapikeys["service1_key"]
注意:
- 配置变量名大小写敏感,读取时的字符串要和你在Heroku后台填写的变量名完全一致,避免读不到值
- 存JSON格式的密钥集合时,必须严格遵循标准JSON语法,所有字符串用双引号包裹,不要用单引号,否则会解析失败
3. Flask项目适配写法
如果是多文件拆分的Flask项目,可以把密钥加载到Flask的全局配置对象中,方便各路由模块调用:
from flask import Flask import os import json app = Flask(__name__) # 加载到app配置 app.config["X_App_APIKeys"] = json.loads(os.getenv("X_App_APIKeys"))
后续在视图函数中调用时,只需要导入current_app即可读取:
from flask import current_app @router.route("/test") def test_view(): myapikeys = current_app.config["X_App_APIKeys"] # 后续业务逻辑
本地调试提示
本地开发时没有Heroku的环境变量注入,可以在项目根目录创建.env文件写入对应配置,配合python-dotenv库自动加载环境变量,注意要把.env加入.gitignore,不要把包含密钥的文件提交到代码仓库。
内容的提问来源于stack exchange,提问作者Horando
相关产品推荐
相关产品推荐

