【问题标题】:Still getting KeyError: 'SECRET_KEY' in my Django Project having set up environment variables设置环境变量后,我的 Django 项目中仍然出现 KeyError: 'SECRET_KEY'
【发布时间】:2020-09-14 12:49:27
【问题描述】:

我在我的 pipenv 虚拟环境 bin/activate (linux) 或 scripts\activate(windows) 文件中为我的 django 项目创建了环境变量,我在设置文件中进行了必要的更改以及退出并重新激活虚拟环境但我仍然出现密钥错误(我正在使用 Windows 机器)

settings.py 中的变量

SECRET_KEY = os.environ['SECRET_KEY']

EMAIL_HOST_PASSWORD = os.environ['EMAIL_HOST_PASSWORD']

virtualenv\scripts\activate 文件中的 evnvironment 变量

export SECRET_KEY= "mysecretkey"

export EMAIL_HOST_PASSWORD= "mypassword"

错误

File "C:\Users\Dell\.virtualenvs\team-272-SMES-Server-dSgdZ4Ig\lib\os.py", line 673, in __getitem__
    raise KeyError(key) from None
KeyError: 'SECRET_KEY'

【问题讨论】:

  • 在 Windows 上尝试set SECRET_KEY="mysecretkey"
  • @Alasdair 仍然遇到同样的错误
  • 我不使用 Windows,所以没有任何建议。在激活虚拟环境后尝试输入set - 我认为这应该会显示您的环境变量。您也可以尝试在运行manage.py 之前手动运行set/export 命令。这样您就可以确定问题是实际的命令,还是当您激活环境时它们没有运行。
  • 在您的命令前添加SECRET_KEY=mysecretkey,例如SECRET_KEY=mysecretkey python manage.py
  • 当你运行激活文件时,它可以设置Django可以从环境中读取的环境变量。 Django 从不查看激活文件。

标签: django python-3.x windows heroku


【解决方案1】:

在 Windows 服务器上,我建议使用您的所有数据库和应用程序机密创建一个 JSON(或 YAML)文件。我个人更喜欢 JSON,所以一个例子是

{
"SECRET_KEY": "...",
"MYSQL_DBUSER": "jon"
"MYSQL_PW": "..."
...
}

然后在您的settings.py 中添加类似

import json

with open("config.json") as config:
    config = json.load(config)

然后要简单地加载项目的机密,按变量名称索引它们,例如

SECRET_KEY = config['SECRET_KEY']

【讨论】:

    【解决方案2】:

    确保您的 os.environ 中有“SECRET_KEY”

    使用此代码检查您是否有“SECRET_KEY”:

    import os 
    import pprint 
    
    # Get the list of user's 
    # environment variables 
    env_var = os.environ 
    
    # Print the list of user's 
    # environment variables 
    print("User's Environment variable:") 
    pprint.pprint(dict(env_var), width = 1) 
    

    您可能在环境变量列表中缺少“SECRET_KEY”。您可以添加一个变量:

    # importing os module  
    import os 
    
    # Add a new environment variable  
    os.environ['GeeksForGeeks'] = 'www.geeksforgeeks.org'
    

    source

    【讨论】:

    • 我明白你的意思。我在我的应用程序中使用了 heroku,所以我在那里设置了我的变量,并且我有一个用于本地开发的 settings_local 文件,并且变量在那里被硬编码。我不确定这是否有帮助
    • 啊,现在我明白了,如果您在生产中设置环境变量,那么在开发中使用 python 文件进行本地设置是多么有用。感谢您的解释。
    猜你喜欢
    • 2020-11-18
    • 2021-06-10
    • 2021-02-20
    • 2016-05-01
    • 2021-11-07
    • 1970-01-01
    • 2016-10-19
    • 1970-01-01
    • 2019-05-03
    相关资源
    最近更新 更多