1

我正在使用带有 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_SYSTEMTrue,SomeMiddlewareprocess_request函数返回一条警告消息,HttpResponse并且后面的 Middewares 根本不运行。这给了我一种系统关闭以进行维护

DISABLE_USER_INTERFACE过滤器request和用户调用的任何视图功能都被阻止,而adminurl 和管理功能正常运行。

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

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

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

任何建议将不胜感激。

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

if 19:00<now()<19:30:
    stop system

对于每个请求。我需要一些更有效的东西来避免不必要的过程。或者中间件是那种作品的正确选择?

4

1 回答 1

1

当您计划更改设置后,您可能需要重新考虑您正在执行的操作。

您的中间件可以更加智能。这使您的设置变得更加愚蠢。

我强烈建议你有一个总是安装SomeMiddleware的类。

SomeMiddleware然后该类可以检查settings并决定它应该执行的行为 。

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

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

您可以拥有一个“操作模式”类定义,其中包含一个(或几个)属性,这些属性由中间件简单地获取以查看发生了什么。您可以编写您的管理应用程序在此表上执行简单的更新以更改模式。

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

于 2012-01-04T15:38:45.973 回答