Django中的动态配置

时间:2012-04-26 21:43:07

标签: python django web-services

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

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

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

如何将通过HTTP检索的信息提供给所有视图?

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

1 个答案:

答案 0 :(得分: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

不,我在这里引用它:

  

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

     

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

     

您应该为设置分配的唯一位置是设置文件。

(我加粗了)