如何正确从.flaskenv文件读取配置值到Flask应用的app.py文件?
解决Flask从.flaskenv读取环境变量的问题
嘿,这个问题我之前也碰到过,咱们一步步来搞定它!
首先,你之前用os.SQL_PW报错的原因很简单:os模块不会把环境变量直接作为自身的属性暴露出来,你得用专门的方法去读取它们。
正确的操作步骤:
1. 确保.flaskenv的格式正确
你的.flaskenv文件里的变量定义没问题,就保持:
SQL_PW=myFakePassword
注意不要给密码加引号(除非密码里包含空格或特殊字符,这时候可以用双引号包裹)。
2. 在app.py里正确读取环境变量
用os.getenv()方法来读取,这个方法能安全地获取环境变量,还可以设置默认值(防止变量不存在时出错)。推荐用f-string来拼接数据库URI,比字符串拼接更清晰:
from flask import Flask , render_template , request, redirect, url_for from flask_sqlalchemy import SQLAlchemy import os app = Flask(__name__) # 读取环境变量,第二个参数是可选的默认值 db_pw = os.getenv('SQL_PW') # 或者如果想确保变量存在,可以加个判断 if not db_pw: raise ValueError("SQL_PW环境变量未在.flaskenv中设置") app.config['SQLALCHEMY_DATABASE_URI'] = f'postgresql+psycopg2://postgres:{db_pw}@localhost/quotes'
3. 确保环境变量被正确加载
Flask 1.0及以上版本会自动加载项目根目录下的.flaskenv文件,只要你用flask run命令启动应用就行。但如果是用python app.py直接运行,Flask不会自动加载这个文件,这时候你需要手动安装并使用python-dotenv:
- 先安装依赖:
pip install python-dotenv
- 然后在app.py的最开头添加加载代码:
from dotenv import load_dotenv # 加载.flaskenv文件(默认会找项目根目录的.env或.flaskenv) load_dotenv()
额外的最佳实践
- 一定要把
.flaskenv添加到.gitignore里,绝对不能把包含敏感信息的文件推送到GitHub! - 生产环境中,建议用服务器的环境变量设置(比如Docker、云平台的配置),而不是依赖.flaskenv文件,更安全。
内容的提问来源于stack exchange,提问作者David Reke
相关产品推荐
相关产品推荐

