Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django中的错误设置模块_Python_Django_Django Settings - Fatal编程技术网

Python Django中的错误设置模块

Python Django中的错误设置模块,python,django,django-settings,Python,Django,Django Settings,我制作了以下目录结构: project main_app settings base.py local.py production.py ... manage.py 我开始使用local.py: from .base import * 我将manage.py更新如下(已提及): 运行我的单元测试很有效。我在本地运行服务器,这很有效。调用API是有效的。然后,我调用一个脚本,其中包含

我制作了以下目录结构:

project
    main_app
        settings
            base.py
            local.py
            production.py
    ...
    manage.py
我开始使用
local.py

from .base import *
我将
manage.py
更新如下(已提及):

运行我的单元测试很有效。我在本地运行服务器,这很有效。调用API是有效的。然后,我调用一个脚本,其中包含以下内容:

from django.conf import settings

data_dir = Path(settings.BASE_DIR) / 'csv'
但是,当我运行此脚本时,在加载对象
设置时会出现以下错误:

django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.
当我在django/conf/_init__.py
中的class
settings中打印设置模块时,我发现它使用了错误的设置文件(该文件不存在):

为什么不采用正确的设置文件,如
manage.py
中所示?我读到它可能是中间件中的循环引用,但我找不到它。这是我的中间件设置:

MIDDLEWARE_CLASSES = [
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.security.SecurityMiddleware',
]
当我在shell中回显环境变量
$DJANGO\u SETTINGS\u MODULE
时,返回一个空行。为了检查环境变量是否设置在项目中的某个位置,我在终端中显式搜索它

$ pwd
/Applications/XAMPP/htdocs/project/src
$ sift DJANGO_SETTINGS_MODULE
Binary file matches: project/__pycache__/wsgi.cpython-35.pyc
main_app/wsgi.py:os.environ.setdefault("DJANGO_SETTINGS_MODULE", "main_app.settings.local")
Binary file matches: fe_import/__pycache__/CsvReader.cpython-35.pyc
fe_import/CsvReader.py:    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "main_app.settings.local") ==> This is the script I am running
manage.py:    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "main_app.settings.local")

我不知道这是否有帮助,但我会告诉你我所知道的以及我们是如何做到的。首先,修补manage.py是个坏主意。我相信这个文件需要保持原样。我们有以下设置:one settings.py包含项目的设置和变量。在它附近我们有local.py。在设置中,我们有:
import*from local
。此文件位于本地计算机上,具有以下内容:

#database settings for sqlite
#passwords for apis
debug=True
然后我们必须将此文件添加到.gitignore,这样在git从生产中拉出来之后,我们就不会在生产服务器上拥有此文件。 在生产中,我们创建另一个local.py

#database settings for production database
#passwords for apis
debug=False
因此,“本地”不是指开发,而是“本机的本地”

运行我的单元测试很有效。我在本地运行服务器,这很有效。调用API是有效的然后调用一个脚本,其中包含以下内容:

你怎么称呼你的剧本?显然不是通过
manage.py

这一行:

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings.local")
需要出现在每个脚本中

此外,确保周围没有任何内容覆盖
DJANGO\u SETTINGS\u MODULE
的值,也没有任何内容手动调用
SETTINGS.configure()



提示:为了避免重复相同的代码,避免出现此类问题,我经常使用而不是编写自己的脚本。

您能
在shell中回显$DJANGO\u设置\u模块吗?如果已设置,它将覆盖
manage.py
中的默认设置。您还可以粘贴更新后的
manage.py
脚本的全部内容吗?我已经用这些附加信息更新了问题。我遵循《Django的两个勺子》一书中的惯例,老实说,这似乎是处理不同设置文件的更好方法。修补
manage.py以满足您的需要是完全有效的。它是您项目的一部分,而不是Django安装。事实上,我没有通过
manage.py
运行它。现在,在加载设置对象之前,我将该行复制到脚本中。但是,我仍然得到相同的错误。@physicalattraction:在
conf/\uuuuu init\uuuuuuu.py
中,除了打印设置模块名称之外,请尝试打印
DJANGO\u设置\u模块的值。另外,请确保不要调用
settings.configure()
(也不要调用
DJANGO\u settings\u MODULE
两次)环境变量设置为与设置模块名称相同,我已经在问题中对其进行了更新。我(认为我)没有显式调用
settings.configure()
DJANGO\u settings\u模块两次,除非DJANGO.conf import settings中的
行发生这种情况,某些内容正在覆盖env变量。请尝试
grep-r DJANGO\u设置\u模块
,并确保调用脚本时
DJANGO\u设置\u模块
确实未设置(请记住,
setdefault()
仅在未设置env变量的情况下工作)。事实上,环境变量已经设置好了!我在Eclipse中自动运行它。当我设置环境变量而不是使用
setdefault
时,问题就消失了!:-)
#database settings for production database
#passwords for apis
debug=False
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings.local")