我可以(安全地)覆盖服务器端的 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'
我想部署两个共享相同源 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'