2011-09-03 19 views
12

¿Hay alguna manera fácil de decirle al runserver de Django que sobrescriba una sola variable en el archivo settings.py?Django: Anular depuración = Verdadero desde el comando manage.py runserver

Me gustaría ser capaz de llamar a:

python manage.py runserver 0.0.0.0:8000 Debug=False 

¿Alguna idea?

Motivo: tengo un sitio en particular donde hay cientos de consultas de bases de datos para mostrar o guardar una página en particular, me gustaría poder desactivar la depuración rápidamente sin tener que editar el archivo de configuración (que tiene la posibilidad de siendo olvidado).

Respuesta

15

yo creo que hay dos opciones

La más sencilla es probablemente una anulación de los ajustes personalizados, algo así como:

# no_debug_settings.py 

# pull in the normal settings 
from settings import * 

# no debug for us 
DEBUG = False 

Ahora, cuando se desea iniciar sin depurar, que había corrido:

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

Como alternativa, puede personalizar su archivo manage.py. Eso importa la configuración y la pasa al execute_manager. Si agregó algún código entre la importación y la llamada, podría hacer que verifique argumentos adicionales y modifique la configuración según sea necesario. Es un poco más complicado y propenso a romper/ser olvidado, por lo que sugiero que la opción de anular la configuración sea probablemente la mejor manera de hacerlo.

+0

lo suficientemente cerca de un solo comando, gracias! – Ted

+1

el env var 'DJANGO_SETTINGS_MODULE' se puede utilizar para dirigir un entorno en un archivo de configuración particular. – ThorSummoner

5

edité mi archivo settings.py con un bloque condicional, así:

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 = ["*"] 

A continuación, ejecutar el servidor haciendo pasar la variable ambiental DJANGO_DEBUG=1. Se puede nombrar a la variable de cualquier cosa que desee, siempre y cuando sean compatibles:

DJANGO_DEBUG=1 python -Wall manage.py runserver 

Omitir esa variable ambiental al llamar manage.py desactivar depuración (porque ajustarlo a cualquier valor, incluyendo 0 se sigue que sea fiel a la Python código)

actualización:. Un comentarista indicó que la directiva ALLOWED_HOSTS se ignora cuando DEBUG es True. Esto solo es cierto en las versiones anteriores de Django. El comportamiento actual es respetar ALLOWED_HOSTS o predeterminado a las direcciones del host local si no se especifica cuando DEBUG está habilitado. Mi respuesta se actualiza para reflejar esto como una corrección menor.

Esto se obtienen de los Django documentation:

Cuando DEBUG es verdadera y allowed_hosts está vacía, el anfitrión es validado contra [ 'localhost', '127.0.0.1', '[:: 1]' ]

Además, se establece que el comportamiento de sus comentarios sobre actualmente caduca en unos pocos grandes líneas de versión:

en versiones anteriores, ALLOWED_HOST S no fue verificado si DEBUG = True. Esto también se cambió en Django 1.10.3, 1.9.11 y 1.8.16 para evitar un ataque de recombinación de DNS .

+0

'ALLOWED_HOSTS' se ignora cuando' DEBUG' está activado. Si solo desea dar acceso desde localhost, la manera más fácil de controlar eso es establecer a qué interfaz se une con la línea de comando 'runserver'. – rescdsk

+1

Solo en versiones * anteriores * de Django. Por favor mira mi respuesta actualizada. – DamnedFacts

Cuestiones relacionadas