django项目中的.env keyError

dev*_*.Im 2 django environment-variables

因为我的 django 项目,我遇到了困难。
谁可以帮忙?
我要感谢你的帮助。

.env在项目根路径中设置

SECRET_KEY=exampleKey
DEBUG=False


DB_ENGINE=django.db.backends.mysql
DB_NAME=example
DB_USER=admin

...Blah Blah
Run Code Online (Sandbox Code Playgroud)

项目settings.py

import os
import environ

env = environ.Env(DEBUG=(bool, False), )
environ.Env.read_env()

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

SECRET_KEY = env('SECRET_KEY')

DEBUG = env('DEBUG')

...Blah Blah
Run Code Online (Sandbox Code Playgroud)

当运行该项目时,我收到此错误消息。

Django_workspace/asone/asone/.env doesn't exist - if you're not configuring your environment separately, create one.
  "environment separately, create one." % env_file)

    raise KeyError(key) from None
KeyError: 'SECRET_KEY'

During handling of the above exception, another exception occurred:

/Django_workspace/asone/venv/lib/python3.7/site-packages/environ/environ.py", line 277, in get_value
    raise ImproperlyConfigured(error_msg)
django.core.exceptions.ImproperlyConfigured: Set the SECRET_KEY environment variable

Run Code Online (Sandbox Code Playgroud)

我很难,因为我是 django 初学者。
谁可以帮忙?我要感谢你的帮助。


.PS

非常感谢您的回答。对不起。我告诉你,我错过了一些事情。

我设置了一个包以在项目中django-environ使用。.env

pip install django-environ
Run Code Online (Sandbox Code Playgroud)

我有什么遗漏的吗?
解决这个问题还需要哪些信息?


.PS

设置 python-dotenv 包

SECRET_KEY=exampleKey
DEBUG=False


DB_ENGINE=django.db.backends.mysql
DB_NAME=example
DB_USER=admin

...Blah Blah
Run Code Online (Sandbox Code Playgroud)

更改设置.py

import os
import environ

env = environ.Env(DEBUG=(bool, False), )
environ.Env.read_env()

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

SECRET_KEY = env('SECRET_KEY')

DEBUG = env('DEBUG')

...Blah Blah
Run Code Online (Sandbox Code Playgroud)

然后我遇到了这个错误消息。

Watching for file changes with StatReloader
Exception in thread django-main-thread:
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/logging/config.py", line 562, in configure
    handler = self.configure_handler(handlers[name])
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/logging/config.py", line 735, in configure_handler
    result = factory(**kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/logging/handlers.py", line 148, in __init__
    BaseRotatingHandler.__init__(self, filename, mode, encoding, delay)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/logging/handlers.py", line 55, in __init__
    logging.FileHandler.__init__(self, filename, mode, encoding, delay)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/logging/__init__.py", line 1087, in __init__
    StreamHandler.__init__(self, self._open())
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/logging/__init__.py", line 1116, in _open
    return open(self.baseFilename, self.mode, encoding=self.encoding)
FileNotFoundError: [Errno 2] No such file or directory: '/Users/haemil/Desktop/Back-end workspace/Django_workspace/asone/logs/logfile'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/threading.py", line 926, in _bootstrap_inner
    self.run()
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/threading.py", line 870, in run
    self._target(*self._args, **self._kwargs)
  File "/Users/haemil/Desktop/Back-end workspace/Django_workspace/asone/venv/lib/python3.7/site-packages/django/utils/autoreload.py", line 53, in wrapper
    fn(*args, **kwargs)
  File "/Users/haemil/Desktop/Back-end workspace/Django_workspace/asone/venv/lib/python3.7/site-packages/django/core/management/commands/runserver.py", line 110, in inner_run
    autoreload.raise_last_exception()
  File "/Users/haemil/Desktop/Back-end workspace/Django_workspace/asone/venv/lib/python3.7/site-packages/django/utils/autoreload.py", line 76, in raise_last_exception
    raise _exception[1]
  File "/Users/haemil/Desktop/Back-end workspace/Django_workspace/asone/venv/lib/python3.7/site-packages/django/core/management/__init__.py", line 357, in execute
    autoreload.check_errors(django.setup)()
  File "/Users/haemil/Desktop/Back-end workspace/Django_workspace/asone/venv/lib/python3.7/site-packages/django/utils/autoreload.py", line 53, in wrapper
    fn(*args, **kwargs)
  File "/Users/haemil/Desktop/Back-end workspace/Django_workspace/asone/venv/lib/python3.7/site-packages/django/__init__.py", line 19, in setup
    configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
  File "/Users/haemil/Desktop/Back-end workspace/Django_workspace/asone/venv/lib/python3.7/site-packages/django/utils/log.py", line 75, in configure_logging
    logging_config_func(logging_settings)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/logging/config.py", line 799, in dictConfig
    dictConfigClass(config).configure()
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/logging/config.py", line 570, in configure
    '%r' % name) from e
ValueError: Unable to configure handler 'file'

Run Code Online (Sandbox Code Playgroud)

我有什么遗漏的吗?

har*_*gim 5

(python标准库)中没有environ模块。stdlib因此,我通过运行检查是否有名为“environ”的第三方模块,该模块安装了它,但是当我在pypi 网站pip install environ上检查时,我看不到任何有效的解释。我觉得保养得不好

所以我得出的结论是你的环境配置有点奇怪。

这是我的建议

  1. 通过运行安装python-dotenvpip install python-dotenv模块。有很多.env模块,但我认为这是最受欢迎、维护良好的模块之一。

  2. 确保您的.env文件位于所在目录中settings.py。除非另有说明,否则将在同一目录中setting.py加载文件.env

  3. 从此更改您的代码

import os
import environ

env = environ.Env(DEBUG=(bool, False), )
environ.Env.read_env()

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

SECRET_KEY = env('SECRET_KEY')

DEBUG = env('DEBUG')
Run Code Online (Sandbox Code Playgroud)

对此

import os
from dotenv import load_dotenv

load_dotenv()

...

SECRET_KEY = os.getenv('SECRET_KEY')
DEBUG=os.getenv('DEBUG')

...

Run Code Online (Sandbox Code Playgroud)

以类似的方式更改您的数据库设置

DATABASES = {
    'default': {
        'ENGINE': os.getenv('DB_ENGINE'), 
        'NAME': os.getenv('DB_NAME'),
        'USER': os.getenv('DB_USER'),
        # and so on ...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)