【问题标题】:Can I (safely) override Django settings in a server side wsgi.py?我可以(安全地)覆盖服务器端 wsgi.py 中的 Django 设置吗?
【发布时间】:2021-10-05 11:10:07
【问题描述】:

我想部署两个共享相同源代码/存储库以及相同设置文件的 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()

非常感谢您的帮助!

【问题讨论】:

  • 为什么不简单地在环境变量中设置这些值呢?请参阅:help.pythonanywhere.com/pages/… 另一方面,如果您想从 wsgi 文件中执行此操作,只需编写 os.environ['SOME_VAR'] = 'SOME_VALUE' 类似于 os.environ['DJANGO_SETTINGS_MODULE'] = 'core.settings'

标签: python django wsgi


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    根据 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'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-02
      • 1970-01-01
      • 2011-06-30
      • 2013-05-17
      相关资源
      最近更新 更多