2

我试图在运行时自动确定 Django 中的一些配置设置。

我已经设置了一个中间件处理程序,它在发出第一个请求之前运行一次,然后通过引发 MiddlewareNotUsed 来禁用自身。当处理程序运行时,它会通过 HTTP 从另一台服务器获取一些信息。我希望该信息可用于所有视图。

在设置模块中,我有一个空字符串。我认为我可以使用检索到的信息动态地修改它,以便所有视图都可以使用它。但是当我从中间件处理程序更新字符串时,信息不知何故丢失了。视图只看到空字符串。

如何使通过 HTTP 检索到的信息可用于所有视图?

我想将它保存在内存中,而不是数据库或文件系统中,但如果这是唯一的选择,我将使用其中一个选项。

4

1 回答 1

1

好的,我曾经做过类似的事情,但我并不为此感到自豪:)

但这很简单并且完成了工作,所以这里是:

from django.conf import settings

class SomeMiddleware(object):
    def process_request(self, request):
        try:
            settings.SOME_STRING_CONFIG
        except AttributeError:
            settings.SOME_STRING_CONFIG = some_value_to_set

但是,这不是处理 django.settings 的好方法,请参阅https://docs.djangoproject.com/en/dev/topics/settings/#altering-settings-at-runtime

不,让我在这里引用它:

在运行时更改设置
不应该在运行时更改应用程序中的设置。例如,不要在视图中这样做:

from django.conf import settings
settings.DEBUG = True #要这样做!

您应该分配给设置的唯一位置是在设置文件中。

(我加了粗体)

于 2012-04-28T13:49:36.520 回答