从settings.py更改设置变量

时间:2012-01-04 14:30:45

标签: python django django-settings

我正在使用带有mod_wsgi的Django 1.3

在我的settings.py

DISABLE_SYSTEM = False
DISABLE_USER_INTERFACE = False
MIDDLEWARE_CLASSES = [
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
]
if DISABLE_SYSTEM:
    MIDDLEWARE_CLASSES.insert(0, 'SomeMiddleware')
if DISABLE_USER_INTERFACE:
    MIDDLEWARE_CLASSES.append('SomeOtherMiddleware')

当我将DISABLE_SYSTEM设置为True时,SomeMiddleware的{​​{1}}函数会返回一条警告消息process_request,并且以下的Middewares根本不会运行。这给了我一种 System shutdown for maintenance

HttpResponse过滤器DISABLE_USER_INTERFACE并阻止用户调用的任何视图函数,而request网址和管理功能正常运行。

到目前为止,我使用它来维护不同类型,我只需从文件中更改它,然后触摸wsgi 重新加载python模块。但是现在,我需要使用一种预定的例程来停止基于用户的请求并在后台执行一些维护以及从管理员处执行一些维护。

此时,我系统(但不是用户)需要从adminDISABLE_USER_INTERFACE设置为True并开始维护。但是我无法找到这样做的方法或更好的方法来处理这个问题而不是settings.py而是来自其他地方。

settings.py中的行而不是更改settings py,因为我需要每天使用此函数一次,并且对每个请求使用这两个中间件对我来说似乎不合逻辑。因此,在我当前的模型中,它们仅在需要运行时运行

任何建议都将受到赞赏。

更新:我想要做的是每天19:00 - 19:30禁用用户界面。我不确定如何进行中间件级别检查:

DISABLE_USER_INTERFACE

每个请求。我需要更高效的东西来避免不必要的过程。或者中间件是这类作品的正确选择?

1 个答案:

答案 0 :(得分:1)

如果您计划更改设置,则可能需要重新考虑正在进行的操作。

您的中间件可以更加智能。这使您的设置成为可能,非常多。

我强烈建议您安装一个始终SomeMiddleware课程。

那个SomeMiddleware类可以检查settings并确定它应该执行哪种行为。

还有更好的方法可以做到这一点。

您不一定需要修改计划维护的设置。在运行的Django应用程序中,您有许多与中间件通信的方法。其中最快的是通过数据库。

您可以使用一个(或几个)属性进行“操作模式”类定义,这些属性只是由中间件提取以查看正在发生的事情。您可以编写管理应用程序以在此表上执行简单更新以更改模式。

您可以使用“操作模式”文件名(如果存在)更改中间件的行为。您只需要执行os.path.exists()类函数来检查(快速)执行操作。