2011-07-16 4 views
17

Recientemente he actualizado mi instalación django de 1.2 a 1.3. En mi sistema de desarrollador no recibí ninguna advertencia sobre llamadas obsoletas. Pero una vez que moví el código a mi servidor Apache de producción, vi muchos mensajes 'DeprecationWarning' en mis registros de apache. Entonces, ¿cómo debo llamar a runserver a estos mensajes también?¿cómo obtengo django runserver para mostrarme DeprecationWarnings y otros mensajes útiles?

Actualmente me llaman así:

python manage.py runserver --verbosity 2 
+2

¿Qué versión de python estás ejecutando? Ver la respuesta de @ chrisv. – nealmcb

+1

Tuve este problema exacto en un MBPro que ejecutaba Python 2.7, pero el mismo código exacto mostraba las advertencias en otro sistema con Python 2.6. La respuesta de @ chrisv lo resolvió y es la mejor manera de recuperar las advertencias. – brianz

Respuesta

0

El comando de ejecución del servidor ignora la opción de verbosidad: https://code.djangoproject.com/ticket/15132

me gustaría recomendar la creación de un registrador y dirigir la salida a stderr: https://docs.djangoproject.com/en/1.3/topics/logging/

Por ejemplo:

import logging 
logger = logging.getLogger('django') # Django's catch-all logger 
hdlr = logging.StreamHandler() # Logs to stderr by default 
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') 
hdlr.setFormatter(formatter) 
logger.addHandler(hdlr) 
logger.setLevel(logging.WARNING) 
26

Python 2.7 disables the display of DeprecationWarning by default

Para volver a habilitarla, ajuste PYTHONWARNINGS de variables de entorno a "d":

export PYTHONWARNINGS="d"; ./manage.py runserver 
+1

para cualquier persona en windows: también es posible configurar el env var como: "set PYTHONWARNINGS = d" – tutuDajuju

+0

Bueno ... esto es fácil de pasar por alto y me tomó un tiempo rastrearlo. También está documentado en [warnings docs] (http://docs.python.org/2/library/warnings.html#warning-categories): "Modificado en la versión 2.7: DeprecationWarning se ignora por defecto". – brianz

+1

¿Quién dice que quiero exportar esta configuración a mi sesión de shell actual? Yo uso simplemente: 'PYTHONWARNINGS = d ./manage.py runserver' –

3

para que el servidor de desarrollo y sus pruebas fallan para DeprecationWarnings con el fin de localizar y fijarlos , puede convertirlos en errores agregando

if settings.DEBUG: 
    import warnings 
    warnings.simplefilter('error', DeprecationWarning) 
# these are less urgent but could also be enabled 
# warnings.simplefilter('error', PendingDeprecationWarning) 

a su nivel superior urls.py.

Prefiero este enfoque porque falla en las pruebas y me permite ubicar el código en desuso uno por uno de manera automatizada.

Cuestiones relacionadas