【Django】either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure()

解决方案:在终端执行

export DJANGO_SETTINGS_MODULE=your_project_name.settings

注:当您通过 export 命令设置环境变量时,这些环境变量只在当前会话中有效。一旦您关闭终端窗口或重新启动计算机,这些环境变量将被丢失,您需要重新设置它们。

===============

事由:django 通过浏览器网页请求访问,一切正常。但直接在pycharm的终端窗口运行却报错。提示:

raise ImproperlyConfigured(
django.core.exceptions.ImproperlyConfigured: Requested setting DATABASES, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

报错代码如下:


from django.http import HttpResponse
from django.db import connection

def test():
    with connection.cursor() as cursor:
        query = "SELECT id FROM mytable LIMIT 10"
        cursor.execute(query)
        id_list = cursor.fetchall()
        id_list2 = [item[0] for item in id_list]
        return id_list2

def doTest(request):
    return HttpResponse(test())

if __name__ == "__main__":
    print(test())

通过浏览器访问doTest()对应的url,输出正常。 直接在pycharm中执行 print(test()) 进行测试。则报错。

原因:

 django.db.connection 是环境配置的其中一部分。

PyCharm的终端窗口环境默认情况下并未导入mysite.settings,所以报错。

在浏览器中访问Django视图时,Django会自动处理这些配置,所以正常。

解决方案的具体操作:

1、打开终端,并切换到项目根目录(manage.py 文件所在目录)

2、终端中执行以下命令:export DJANGO_SETTINGS_MODULE=your_project_name.settings

windows操作系统用:set DJANGO_SETTINGS_MODULE=mysite.settings

解释:

export 是一个Unix和类Unix操作系统中用于设置环境变量的命令。export 命令允许您为特定的环境变量分配值,以便它们在当前会话中可用。

当您通过 export 命令设置环境变量时,这些环境变量只在当前会话中有效。一旦您关闭终端窗口或重新启动计算机,这些环境变量将被丢失,您需要重新设置它们。

如果您希望在每次启动计算机时都自动设置特定的环境变量,(windows系统)您可以使用系统属性中的环境变量设置或者在启动脚本中设置环境变量。

还不能解决,可以直接在pycharm的界面中进行配置(可以对每个.py文件单独配置环境变量)

【Django】either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure()_第1张图片

 【Django】either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure()_第2张图片【Django】either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure()_第3张图片

=====================

又或者:

【Django】either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure()_第4张图片 【Django】either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure()_第5张图片

你可能感兴趣的:(django,python,后端)