【发布时间】:2019-11-25 13:33:34
【问题描述】:
我正在关注一个 Youtube 教程全功能 Web 应用程序,但我遇到了应用程序工厂问题。根据我的理解,我需要将 SECRET_KEY 和 SQLALCHEMY_DATABASE_URI 等敏感信息放入环境变量中。在视频中,创作者在 Mac 上工作,他打开了他的 .bash_profile 文件并添加了这些行(我将真实值留空):
export SECRET_KEY='....'
export SQLALCHEMY_DATABASE_URI='......'
我正在使用 Windows,但在我的计算机中找不到 .bash_profile 文件,因此我转到控制面板并设置新的环境变量 SECRET_KEY 和 SQLALCHEMY_DATABASE_URI。然后我通过在 config.py 中创建此类 Config 来继续视频中的操作
class Config:
SECRET_KEY = os.environ.get('SECRET_KEY')
SQLALCHEMY_DATABASE_URI = os.environ.get('SQLALCHEMY_DATABASE_URI')
MAIL_SERVER = 'smtp.gmail.com'
MAIL_PORT = 587
MAIL_USE_TLS = True
MAIL_USERNAME = os.environ.get('EMAIL_USER')
MAIL_PASSWORD = os.environ.get('EMAIL_PASSWORD')
然后我运行我的应用程序,但出现了错误消息“使用 CSRF 需要密钥”,所以我认为我的烧瓶应用程序无法获取我设置的 SECRET_KEY 或其他环境变量。在我的 init.py 中有这些配置之前,应用程序运行良好,但现在当我将这些配置移动到 config.py 中的对象内部时,它停止工作。
根据我的理解,export 是一个创建环境变量的命令,所以我认为将这些变量导出到 .bash_profile 文件中等于设置环境变量。
为了解决我的问题,我尝试按照教程 (https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xv-a-better-application-structure) 创建 .env 文件。在命令提示符下,我跑了
pip install python-dotenv
在 Config.py 中,我添加了
from dotenv import load_dotenv
basedir = os.path.abspath(os.path.dirname(__file__))
load_dotenv(os.path.join(basedir, '.env'))
我认为这会创建一个 .env 文件,我可以在其中存储我的环境变量,但它什么也没做,而且我没有在我的目录中看到任何 .env 文件。有人可以帮帮我吗 ?我有几个问题:
我需要添加/修复什么才能使我的应用程序正常工作?
设置环境变量和导出环境变量一样吗?如果没有,我如何在设置环境变量后导出环境变量以便我的应用程序可以工作?
在 .env 文件中存储环境变量与在控制面板中设置环境变量有何不同?因为当我尝试在 google 上搜索“Edit .env file in windows”时,会出现“添加环境变量”之类的结果。
.bash_profile 和 .env 文件有什么区别?我跑了
man bash,它说.bash_profile 是The personal initialization file, executed for login shells,但我不明白这是否意味着它与.env 文件完全不同。
【问题讨论】:
-
不,您自己创建
.env文件并在单独的行中填写KEY=value。 -
嗨!谢谢你的评论。我想知道这是否与设置环境变量相同?我在谷歌的任何地方都找不到创建 .env 文件的教程。谢谢
-
并不完全一样,但实际上如此。我会在一分钟内为你写一个更详细的答案。
标签: python flask environment-variables factory