gpt4 book ai didi

python - Django:我在哪里调用settings.configure?

转载 作者:太空狗 更新时间:2023-10-30 01:15:37 25 4
gpt4 key购买 nike

Django docs假设我可以调用 settings.configure 而不是 DJANGO_SETTINGS_MODULE。我希望我的网站项目能够做到这一点。我应该在哪个文件中调用 settings.configure 以便在正确的时间配置我的设置?

编辑以回应 Daniel Roseman 的评论:

我想这样做的原因是 settings.configure 允许您将设置变量作为 kwargs dict 传递,例如{'INSTALLED_APPS': ..., 'TEMPLATE_DIRS': ..., ...}。这将允许我的应用程序的用户在字典中指定他们的设置,然后将该字典传递给我的应用程序中的一个函数,该函数使用使我的应用程序运行所需的某些设置来增强它,例如将条目添加到 INSTALLED_APPS

我的设想是这样的。让我们称我的应用程序为“rexe_app”。在 wsgi.py 中,我的应用程序的用户会这样做:

import rexe_app
my_settings = {'INSTALLED_APPS': ('a','b'), ...}
updated_settings = rexe_app.augment_settings(my_settings)
# now updated_settings is {'INSTALLED_APPS': ('a','b','c'), 'SESSION_SAVE_EVERY_REQUEST': True, ...}
settings.configure(**updated_settings)

最佳答案

它不完全相同,因为设置 DJANGO_SETTINGS_MODULE 更新默认值,在 django.conf.settings.global_settings 中找到,而 configure 的参数完全忽略它们,因此您必须添加一些额外的处理。

请注意,首先,您不能即时修改 INSTALLED_APPS,因为它们在设置处理时会被检查一次。例如,要在 Apache 部署的应用程序中对 INSTALLED_APPS 应用修改,您需要重新启动 Apache。

其次,由于设置是导入的,因此该点很容易受到某种注入(inject),并且极易暴露给用户。

如果这是一个元应用程序,则有两种可能性:

  1. 如果您想为 `django` 设置提供默认设置,请将以下内容添加到您应用中的 `default_settings.py`:
    INSTALLED_APPS = ('default_app', )
    只要确保你不在你的应用程序中导入 `default_settings.py`,并让你的用户添加到他们的 settings.py
    from rexe_app.default_settings import *INSTALLED_APPS += ('users_app', )
    这将有效地为您的最终用户将 `INSTALLED_APPS` 设置为 `('default_app', 'users_app', )`。
  2. >如果您需要 `rexe_app` 明智的设置,您可以在应用程序的 `__init__.py` 中默认设置它们:
    from django.conf import settingsREXE_APP_CONFIG_PARAM = getattr(settings, 'REXE_APP_CONFIG_PARAM',     'default_param_value')
    所以当用户需要更改默认的`REXE_APP_CONFIG_PARAM`时,他只需要添加
    INSTALLED_APPS = ('rexe_app')REXE_APP_CONFIG_PARAM = 'user_param_value'
    到他的“settings.py”。

关于python - Django:我在哪里调用settings.configure?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19855160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com