应立即使用 os.environ 管理敏感配置,禁止硬编码密钥、连接串等;推荐 python-dotenv 加载 .env 文件并严格 .gitignore,缺失关键环境变量须报错退出而非静默 fallback。

os.environ 是你该立刻用起来的入口,硬编码密钥、数据库连接串或 API Token 的代码必须全部移出源码。
为什么不能把 API_KEY 写在 config.py 里?
因为只要这个文件进了 Git,就等于把钥匙贴在门上。哪怕加了 .gitignore,也常有人误提交、IDE 自动索引、或者 CI/CD 构建时意外打包进去。更隐蔽的风险是:某些调试接口(如 Flask 的 debug=True 模式)会直接把整个配置对象 dump 出来,API_KEY 就明文躺在 HTTP 响应里。
用 python-dotenv 加载 .env 文件的实操要点
它不是银弹,但能帮你把敏感项从代码路径里物理隔离:
-
pip install python-dotenv后,在项目根目录放一个.env文件,内容形如DATABASE_URL=postgresql://user:pass@localhost/db - 在应用启动最前端(比如
app.py开头)加from dotenv import load_dotenv; load_dotenv() - 务必把
.env加进.gitignore;同时提供.env.example(不含真实值),供团队成员快速对齐变量名 - 注意:
load_dotenv()默认只读取当前目录的.env,跨子目录运行时需显式传参load_dotenv(".env")或用find_dotenv()
os.getenv() 要带默认值吗?
不要。生产环境缺失关键配置应该直接报错退出,而不是静默 fallback 到空字符串或占位符——后者会让服务跑起来但功能异常,问题更难定位。正确写法是:
图片提示词生成器?不止如此。 马甲系统 —— 把脑海中的画面,翻译成AI能理解的专业表达。 用得越多,它越懂你:首次需要多问几句确认方向,用久了几乎一说就懂。 用得越多,它越快:缓存机制让后续对话越来越省。 RAG进化:成功案例持续入库,越跑越聪明。 输入「新手指南」查看完整功能介绍
import os
DATABASE_URL = os.getenv("DATABASE_URL")
if not DATABASE_URL:
raise ValueError("Missing required environment variable: DATABASE_URL")
这样既能拦截缺失,又避免了 os.getenv("KEY", "default") 这种掩盖问题的惯性操作。
Web 框架里最容易被忽略的泄露点
Flask 和 Django 都有“配置反射”风险:
- Flask 的
app.config.from_object()如果指向的是一个模块(如config.DevConfig),而该模块里写了SECRET_KEY = "xxx",那这个值仍属于硬编码——只是换了个地方藏 - Django 的
settings.py若未拆分环境,且DEBUG = True在生产环境残留,会暴露完整 traceback,其中常含数据库连接串或中间件配置 - 任何框架的管理后台(如 Django Admin、Flask-Admin)如果未限制 IP 或启用双因素,攻击者拿到一个低权限账号就能导出所有配置模型
真正的隔离不是“换个文件放”,而是让敏感值只存在于进程启动那一刻的内存里,且绝不经过任何序列化、日志或响应体输出——哪怕是一次 print(app.config) 都可能成为突破口。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










