Python Django中的动态配置

Python Django中的动态配置,python,django,web-services,Python,Django,Web Services,我试图在运行时自动确定Django中的一些配置设置 我已经设置了一个中间件处理程序,它在发出第一个请求之前运行一次,然后通过引发MiddlewareNotUsed来禁用自身。当处理程序运行时,它通过HTTP从另一台服务器获取一些信息。我希望这些信息能够在所有视图中使用 在设置模块中,我有一个空字符串。我认为我可以用检索到的信息动态地修改它,这样所有视图都可以使用它。但是,当我从中间件处理程序更新字符串时,信息不知何故丢失了。视图只能看到空字符串 如何使通过HTTP检索的信息可供所有视图使用 我希

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

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

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

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


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

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

但是它非常简单,并且完成了任务,所以它是:

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的好方法,请参阅

不,让我在这里引用:

在运行时更改设置
不应在运行时更改应用程序中的设置。例如,不要在视图中执行此操作:

从django.conf导入设置
settings.DEBUG=True#不要这样做

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


(我添加了粗体)

u可以使用django缓存来存储字符串,这样它在所有视图中都可用。您可以使用这个应用程序:您还可以使用request.session,它比其他应用程序更可靠cache@alexarsh:你能概述一下这是怎么回事吗?启动中间件处理程序运行时没有可用的请求对象。请在中间件中定义一个类(类CustomMiddleware(对象))。在该类中定义process_request函数(def process_request(self,request)),然后您可以使用如下会话:request.session[“key”]=…感谢您的回复。这对我有用。这与我已经实现的不同之处在于将其分配给django.conf.settings,而不是特定于项目的设置。不幸的是,Django文档在没有说明原因和提供替代方案的情况下不鼓励这样做。我想他们可能正在讨论将此作为视图之间共享信息的机制,这听起来可能非常危险。我可以想象,即使对于我的用例,使用它也可能导致竞争条件,所以我将保留这个问题。(对此很抱歉。)是的,我告诉自己,如果我在早期(最好是第一次)中间件中更改设置,那么就可以了:)注意,这是有效的,因为它只设置一次值。例如,您不应该以这种方式更改每个请求的设置,因为这不是线程安全的。