在我的设置中,我使用 django-environ 来设置密钥:
import environ
env = environ.Env()
SECRET_KEY = env.read_env('SECRET_KEY')
在我的项目的根目录中,我确实有一个包含实际密钥的 .env 文件:
.env:
SECRET_KEY=qgw6s66n3e$27mmddfua*8yq6n%gz(!mx8e=@zbixk50-h020
该错误将在
collectstatic
期间运行。这是回溯:
Traceback (most recent call last):
File "./manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/Users/sju/.virtualenvs/blog-api/lib/python2.7/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
utility.execute()
File "/Users/sju/.virtualenvs/blog-api/lib/python2.7/site-packages/django/core/management/__init__.py", line 356, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/Users/sju/.virtualenvs/blog-api/lib/python2.7/site-packages/django/core/management/__init__.py", line 194, in fetch_command
settings.INSTALLED_APPS
File "/Users/sju/.virtualenvs/blog-api/lib/python2.7/site-packages/django/conf/__init__.py", line 56, in __getattr__
self._setup(name)
File "/Users/sju/.virtualenvs/blog-api/lib/python2.7/site-packages/django/conf/__init__.py", line 41, in _setup
self._wrapped = Settings(settings_module)
File "/Users/sju/.virtualenvs/blog-api/lib/python2.7/site-packages/django/conf/__init__.py", line 110, in __init__
mod = importlib.import_module(self.SETTINGS_MODULE)
File "/usr/local/Cellar/python/2.7.12_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
File "/Users/sju/Dev/django/blog-api/src/blog/settings/base.py", line 27, in <module>
SECRET_KEY = env('SECRET_KEY')
File "/Users/sju/.virtualenvs/blog-api/lib/python2.7/site-packages/environ/environ.py", line 130, in __call__
return self.get_value(var, cast=cast, default=default, parse_default=parse_default)
File "/Users/sju/.virtualenvs/blog-api/lib/python2.7/site-packages/environ/environ.py", line 275, in get_value
raise ImproperlyConfigured(error_msg)
django.core.exceptions.ImproperlyConfigured: Set the SECRET_KEY environment variable
我错过了什么?
我认为你用错了。根据文档,您首先需要加载
.env
文件,然后使用它。
试试这个:
import environ
env = environ.Env()
environ.Env.read_env()
SECRET_KEY = env('SECRET_KEY')
还要确保
.env
文件位于设置文件的目录中。或者,您可以显式地将文件的位置传递给 read_csv()
。
试试这个:
import os
import environ
BASE_DIR = Path(__file__).resolve().parent.parent
env = environ.Env()
environ.Env.read_env(os.path.join(BASE_DIR, '.env'))
SECRET_KEY = env('SECRET_KEY')
DEBUG = env('DEBUG')
成功了。
我也有类似的问题。 就我而言,这是由 Windows 上的 .env 文件格式引起的。 键、等号和值的名称之间不能有空格。 所以:
SECRET_KEY='my_secret_key'
可以工作但是
SECRET_KEY= 'my_secret_key'
或
SECRET_KEY ='my_secret_key'
或
SECRET_KEY = 'my_secret_key'
会调用异常。 它也在异常消息的开头打印出来,如下所示:
Invalid line: SECRET_KEY = 'my_secret_key'
Invalid line: DEBUG = True