Django: переопределить Debug = True из команды manage.py executeerver

Есть ли простой способ сказать Django runserver переопределить одну переменную в файле settings.py?

Мне бы очень хотелось позвонить:

python manage.py runserver 0.0.0.0:8000 Debug=False

Любые мысли?

Мотив: есть конкретный сайт, на котором есть сотни запросов к базе данных для показа или сохранения определенной страницы, я бы хотел быстро отключить отладку, не редактируя файл настроек (который имеет возможность быть забыли).

Ответ 1

Я думаю, у вас есть две опции

Простейшим, вероятно, является переопределение пользовательских настроек, например:

# no_debug_settings.py

# pull in the normal settings
from settings import *

# no debug for us
DEBUG = False

Теперь, когда вы хотите начать без отладки, вы должны запустить:

python manage.py runserver --settings=no_debug_settings 0.0.0.0:8000 

В качестве альтернативы вы можете просто настроить свой manage.py файл. Это импортирует настройки и передает его в execute_manager. Если вы добавили код между импортом и вызовом, вы можете проверить его на наличие дополнительных аргументов и изменить настройки по мере необходимости. Это немного более странно и склонно ломаться/забываться, поэтому я бы предложил, чтобы оболочка переопределения настроек, вероятно, была вашим лучшим способом.

Ответ 2

Я редактировал файл settings.py с условным блоком, например:

import os  # If needed.

if os.environ.get('DJANGO_DEBUG'):
    print("Debug is enabled.")
    DEBUG = True
    # When not specified, ALLOW_HOSTS defaults to:
    # ALLOWED_HOSTS = ['localhost', '127.0.0.1', '[::1]']
else:
    DEBUG = False
    ALLOWED_HOSTS = ["*"]

Затем запустите свой сервер, передав переменную окружения DJANGO_DEBUG=1. Вы можете назвать переменную чем угодно, если вы согласны:

DJANGO_DEBUG=1 python -Wall manage.py runserver

Опустите эту переменную окружения при вызове manage.py, чтобы отключить debug (поскольку установка его для любого значения, включая 0, все равно сделает его верным для кода Python.)

Обновление:. Комментирующий заявил, что директива ALLOWED_HOSTS игнорируется, если DEBUG - True. Это справедливо только в более ранних версиях Django. Текущее поведение заключается в том, чтобы почитать ALLOWED_HOSTS или по умолчанию локальные адреса, если он не указан, когда включен DEBUG. Мой ответ обновлен, чтобы отразить это как незначительную коррекцию.

Это источник из документации Django:

Когда DEBUG является True и ALLOWED_HOSTS пуст, хост проверено против ['localhost', '127.0.0.1', '[:: 1]']

Кроме того, в нем указано, что поведение вашего комментария теперь устарело в нескольких основных версиях:

В старых версиях ALLOWED_HOSTS не был проверен, если DEBUG = True. Это также было изменено в Django 1.10.3, 1.9.11 и 1.8.16, чтобы предотвратить Перезагрузка DNS.