我试图在运行时自动确定Django中的一些配置设置。
我已经设置了一个中间件处理程序,它在第一个请求发出之前运行一次,然后通过引发MiddlewareNotUsed来禁用它自己。当处理程序运行时,它通过HTTP从另一个服务器提取一些信息。我希望这些信息可以在所有视图中使用。
在设置模块中,我有一个空字符串。我认为我可以使用检索到的信息动态修改它,以便它可供所有视图使用。但是当我从中间件处理程序更新字符串时,信息会以某种方式丢失。视图只看到空字符串。
如何将通过HTTP检索的信息提供给所有视图?
我想将它保存在内存中,而不是存储在数据库或文件系统中,但如果这是唯一的选择,我会使用其中一个选项。
答案 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#不要这样做!您应该为设置分配的唯一位置是设置文件。
(我加粗了)