Изменение переменной настройки из settings.py - PullRequest
1 голос
/ 04 января 2012

Я использую Django 1.3 с mod_wsgi

В моем 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 process_requestвозвращает предупреждающее сообщение с HttpResponse, а следующие Middewares не запускаются вообще.Это дает мне своего рода отключение системы для обслуживания

DISABLE_USER_INTERFACE, фильтры request, и любая функция просмотра, вызываемая пользователем, блокируется, в то время как admin URL-адреса и функции управления работают нормально.

До сих пор я использовал это для обслуживания различных типов, и я просто изменил его из файла и коснулся wsgi , чтобы перезагрузить модули Python.Но теперь мне нужно использовать своего рода запланированную подпрограмму для остановки пользовательских запросов и выполнения некоторого обслуживания в фоновом режиме, а некоторые - от администратора.

На данный момент, я система (но непользователь) должен установить DISABLE_USER_INTERFACE на True с settings.py и начать обслуживание.Но я не мог найти способ сделать это Porper или лучший способ справиться с этим не с settings.py, а где-то еще.

Строки в settings py, чем изменения DISABLE_USER_INTERFACE, потому что мне нужно использовать эту функциюодин раз в день и использование этих двух промежуточных программ для каждого запроса мне не кажется логичным.Так что в моей текущей модели они запускаются только тогда, когда они необходимы для запуска

Любые предложения будут оценены.

ОБНОВЛЕНИЕ: Я хочу отключить пользователяинтерфейс в течение 19:00 - 19:30 каждый день.Я не уверен насчет проверки уровня промежуточного программного обеспечения, например:

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

для каждого запроса.Мне нужно что-то более эффективное, чтобы избежать ненужных процессов.Или промежуточное ПО - правильный выбор для такого рода работ?

1 Ответ

1 голос
/ 04 января 2012

Если вы запланировали изменения своих настроек, вы можете пересмотреть то, что делаете.

Ваше Middleware может быть намного умнее. Это делает ваши настройки гораздо более тупыми.

Я бы настоятельно рекомендовал, чтобы у вас был один SomeMiddleware класс, который всегда установлен.

Этот класс SomeMiddleware может затем проверить settings и решить, какое поведение он должен выполнять.

Есть еще лучшие способы сделать это.

Вам не обязательно пересматривать настройки для планового технического обслуживания. У вас есть множество способов общения с промежуточным ПО в работающем приложении Django. Один из самых быстрых - через базу данных.

У вас есть определение класса "рабочего режима" с одним (или несколькими) атрибутами, которые просто выбираются промежуточным программным обеспечением, чтобы увидеть, что происходит. Вы можете написать свои приложения администратора для простого обновления этой таблицы, чтобы изменить режим.

У вас могут быть имена файлов «рабочего режима», которые (если присутствуют) изменяют поведение промежуточного программного обеспечения. Вам нужно только сделать os.path.exists() добрых функций, чтобы проверить (быстро), что делать.

...