2012-01-04 32 views
1

我使用Django 1.3设置变量在我settings.py与mod_wsgi的</p> <p>改变从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_SYSTEMTrueSomeMiddlewareprocess_request函数返回HttpResponse一条警告消息而下面的Middeware不会运行。这给了我一种系统停机维护

DISABLE_USER_INTERFACE过滤器request任何用户称为受阻取景功能,同时admin URL和管理功能正常运行。

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

在这一点上,我系统(但不是用户)需要设置DISABLE_USER_INTERFACETruesettings.py并开始维护。但我无法找到porper的方式来做到这一点或更好的方式来处理这不是从settings.py而是在别的地方。

settings py中的行比变化DISABLE_USER_INTERFACE是因为我需要每天使用这个函数一次,并且对于每个请求使用这两个中间件对我来说似乎不合逻辑。所以在我目前的模型中,他们只在需要运行时运行。

任何建议,将不胜感激。

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

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

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

回答

1

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

您的中间件可以更多,更聪明。这可以使您的设置变得非常笨重。

我强烈建议您有一个SomeMiddleware类,即总是安装

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

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

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

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

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

+0

我想要的是在19.00到19.30之间关闭系统,我想写一个中间件来检查每个请求的时间,如果它是维护时间,但是运行一个'if 19.00 FallenAngel 2012-01-05 11:59:35

+1

“但运行一个如果19.00 <现在()<19.30:停止系统控制每个请求似乎是不必要的”。实际上,开销是无法估量的。但是,这就是为什么我建议在已知位置创建文件的原因。 cron可以根据您的时间表创建和删除此文件。 – 2012-01-05 12:47:49

+0

我想你是对的,这是更好的(: – FallenAngel 2012-01-05 14:08:13