我可以(安全地)覆盖服务器端的 Django 设置 wsgi.py 吗?

Can I (safely) override Django settings in a server side wsgi.py?

我想部署两个共享相同源 code/repository 的 Django web 应用程序(独立域),因此共享相同的设置文件。 (顺便托管在 pythonanywhere 上)。两者之间的唯一区别是它们应该访问不同的数据库(我通常会在 settings.py 或 .env 中定义)。

在我看来,每个 Web 应用程序唯一的唯一文件是它们各自的 ...wsgi.py 文件(服务器上的文件,而不是 Django 项目文件夹中的文件)。因此,我的想法是使用该文件来指定每个应用程序的数据库设置。

是否可以(安全地)覆盖 wsgi 文件中的设置?我该怎么做?

当前 wsgi.py 文件如下所示:

# +++++++++++ DJANGO +++++++++++
# To use your own django app use code like this:
import os
import sys
#
## assuming your django settings file is at '/home/.../mysite/mysite/settings.py'
## and your manage.py is is at '/home/.../mysite/manage.py'
path = '/home/.../...'
if path not in sys.path:
    sys.path.append(path)
#
os.environ['DJANGO_SETTINGS_MODULE'] = 'core.settings'
#
## then:
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

非常感谢您的帮助!

DJANGO_SETTINGS_MODULE 环境指定用于特定 Web 应用程序的设置文件。只需创建 2 个设置模块(每个网络应用程序一个)并将 DJANGO_SETTINGS_MODULE 指向适当的设置模块。

我根据 Abdul Aziz Barkat 的评论寻求以下解决方案。这只需要一个共享设置文件,但是,允许覆盖其中的默认设置。

在settings.py

'SOME_VAR': os.getenv('WSGI_SOME_VAR') or config('SOME_VAR')

在...wsgi.py:

os.environ['DJANGO_SETTINGS_MODULE'] = 'core.settings'
os.environ['WSGI_SOME_VAR'] = 'SOME_VALUE'