【问题标题】:Why do we have to provide WSGI_APPLICATION variable in Django settings为什么我们必须在 Django 设置中提供 WSGI_APPLICATION 变量
【发布时间】:2026-01-26 01:40:01
【问题描述】:

我是 Django 初学者,如果这个问题没有意义,请见谅。

我们在 django 设置中提供了一个名为 WSGI_APPLICATION 的变量以及 ROOT_URLCONF 和其他一些设置变量。我们也在 wsgi.py 文件中提供设置文件路径,

import os
import django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGSS_MODULE", "<settings_file_path>")
application = get_wsgi_application()

所以你看,它是双向连接。对吧?

我的意思是wsgi文件中设置文件的路径和设置文件中wsgi文件的路径。那么我们为什么要这样做。

根据我的理解,wsgi 文件中设置文件的路径应该足够好,我们不需要 django 设置中的那个额外变量?

最终wsgi文件是django应用的起点吧?

如果我错了,请纠正我。

【问题讨论】:

    标签: python django django-settings django-wsgi


    【解决方案1】:

    最终wsgi文件是django应用的起点吧?

    不一定。 documentation for WSGI_APPLICATION 解释了此设置的用途:

    Django 的内置服务器(例如runserver)将使用的 WSGI 应用程序对象的完整 Python 路径。

    您设置的任何服务器都必须知道 WSGI 文件的位置。如果您使用的是外部服务器,它将查看自己的设置。如果你使用 Django 的开发服务器,它会检查 Django 的设置。因此,您注意到的循环是 Django 应用程序可以通过多种不同方式启动这一事实的结果。

    【讨论】:

    • 您所说的“Django 应用程序可以通过多种不同的方式启动”究竟是什么意思。
    • @user5319825:不同的 Web 服务器都有自己的方式来配置 WSGI 和启动 Django。 runserver 的方式是查看 WSGI_APPLICATION 设置,而带有 mod_wsgi 的 Apache,例如 has its own configuration。如果您不需要处理 HTTP 请求,您也可以使用没有 WSGI 或服务器的 Django 应用程序。
    • "如果您不需要服务 HTTP 请求,您也可以使用没有 WSGI 或服务器的 Django 应用程序" 怎么样?
    • @user5319825:你可以写一个custom management command,或者写你自己的脚本然后调用django.setup()
    【解决方案2】:

    恕我直言,wsgi.py 的作用是指向您的 django 项目所在的位置,例如 Apache 或其他 WAS。

    因此 wsgi.py 在 django 之外启动,它需要 django 设置。

    【讨论】: