328 votos

Cómo depurar en Django, el buen camino?

Así que, empecé a aprender a programar en Python y más tarde Django. Las primeras veces era difícil mirar las trazas de retorno y decidir lo que hice mal, y donde el error de sintaxis era. Ha pasado algún tiempo ahora y de alguna manera a lo largo del camino, supongo que tengo una rutina en la depuración mi Django código. Tal como se hacía en los comienzos de mi experiencia de codificación, me senté y me preguntaba si ¿me estaba haciendo era ineficaz y podría hacerse más rápido. Yo generalmente se las arreglan para encontrar y corregir los errores en mi código, pero me pregunto si debería estar haciendo más rápido?

Normalmente yo sólo uso la información de depuración Django da cuando se activa. Cuando las cosas terminan como pensé que lo haría, me rompen el flujo de código mucho con un error de sintaxis, y mirar las variables en ese punto en el flujo de la figura, donde el código que hace algo distinto de lo que yo quería.

Pero, ¿se puede mejorar? Hay algunas buenas herramientas o mejores maneras para depurar su Django código?

298voto

simplyharsh Puntos 11663

Hay un montón de maneras de hacerlo, pero la más sencilla es simplemente uso del depurador de Python. Acaba de agregar la siguiente línea en una Django función de vista:

import pdb; pdb.set_trace()

Si intenta cargar la página en el navegador, el navegador se cuelga y se obtiene una pronta a realizar la depuración en real la ejecución de código.

Sin embargo, hay otras opciones sugeridas por otros (que yo no recomiendo):

* return HttpResponse({variable to inspect})

* print {variable to inspect}

* raise Exception({variable to inspect})

Pero el Depurador de Python (ap) es altamente recomendable para todos los tipos de código de Python. Si usted ya está en ap, también le quieres echar un vistazo a IPDB que utiliza ipython para la depuración. Feliz Codificación.

Una referencia útil proporcionada por Seafangs : Utilizando el depurador de Python en Django

163voto

Benjamin Wohlwend Puntos 14976

Me gusta mucho Werkzeug's depurador interactivo. Es similar a la de Django depuración de página, salvo que de obtener un shell interactivo en cada nivel de la traza. Si usted utiliza el django-extensiones, se obtiene un runserver_plus de la gestión del comando que inicia el desarrollo del servidor y le da Werkzeug del depurador de las excepciones.

Por supuesto, sólo debe ejecutar este local, ya que se le da a cualquier persona con un navegador de los derechos para ejecutar código python arbitrario en el contexto del servidor.

120voto

Koobz Puntos 4224

Un poco rapidito para etiquetas de plantilla:

@register.filter 
def pdb(element):
    import pdb; pdb.set_trace()
    return element

Ahora, dentro de una plantilla que puede hacer {{ template_var|pdb }} e introduzca un ap de sesión (dado que está ejecutando el local devel servidor) donde puedes inspeccionar element para el contenido de su corazón.

Es una muy buena manera de ver lo que sucedió con su objeto, cuando se llega a la plantilla.

58voto

Van Gale Puntos 21982

Hay un par de herramientas que colaboran bien y puede hacer que su depuración tarea más fácil.

Más importante es el de Django barra de herramientas de depuración.

Entonces usted necesita un buen registro con el Python de registro de instalación. Usted puede enviar la salida del registro a un archivo de registro, pero una opción más fácil es enviar registro de salida a firepython. Para utilizar este programa debes utilizar el navegador Firefox con el firebug, la extensión. Firepython incluye un plugin firebug, que mostrará el lado del servidor de registro en un Firebug ficha.

Firebug en sí también es fundamental para depurar el código Javascript del lado de cualquier aplicación que se desarrolle. (Suponiendo que tiene algo de JS código de curso).

También me gustó django-viewtools para la depuración de las vistas de forma interactiva con el ap, pero no la uso mucho.

Hay más herramientas útiles, como cargadores para el seguimiento de las fugas de memoria (también hay otras buenas sugerencias dadas en las respuestas aquí, en LO de la memoria de seguimiento).

29voto

Tomasz Zielinski Puntos 9300

Casi todo lo que se ha mencionado hasta el momento, tan sólo he de agregar que, en lugar de pdb.set_trace() uno puede utilizar ipdb.set_trace() que utiliza iPython y por lo tanto es más potente (autocompletar y otras cosas). Esto requiere ipdb paquete, por lo que uno necesite easy_install ipdb

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X