2011-02-26 10 views
47

Tengo curiosidad por saber si hay una forma razonable de usar la (increíble) django-debug-toolbar con consultas AJAX.¿Cómo usar django-debug-toolbar en llamadas AJAX?

Por ejemplo, uso jQuery $ .get con un conjunto de parámetros para presionar una URL de Django y cargarla en línea. Si tengo un error con eso, no está registrado en la barra de herramientas. Tampoco puedo usarlo al copiar la URL de AJAX porque DDT se adjunta a la etiqueta de cuerpo de la respuesta, y no tendría sentido incluir etiquetas de cuerpo con las respuestas de AJAX.

¡Cualquier dirección sería útil! ¡Gracias!

Respuesta

32

¡Tuve el mismo problema antes! Y como estoy haciendo cada vez más aplicaciones pesadas AJAX, lancé un Django Application y un Chrome extension que juntos resolvieron exactamente ese problema.

Toda la información se encuentra en el repositorio de github.

+1

No estoy seguro de por qué, pero la extensión de Chrome parece no poder mostrar información de depuración para las llamadas Ajax (jQuery.get, jQuery.getJson, ...) –

+0

@PetrPeller ¿instaló el último paquete django-debug-panel? La versión anterior tenía un problema cuando la protección de clickjacking está activada. Si todavía no funciona, ¿podría abrir un problema en github con más información (versión Django, ejemplo de código, etc.) – recamshak

+0

Instalado usando 'pip install django-debug-panel' ... Intentaré investigar más y dejaré usted sabe en GitHub –

4

Ddt se conecta a sí mismo en una respuesta, lo que significa que no hay una forma estándar de explorar sus paneles para la solicitud de AJAX. Además, la respuesta AJAX puede estar en formato JSON, lo que hace imposible que ddt se conecte.

Personalmente, encontraría una manera de registrar la salida ddt en un archivo de texto, o tal vez sea compatible con la arquitectura cliente-servidor en la que el cliente trabaja dentro del controlador de solicitud AJAX y envía datos al servidor. No sé lo que es posible, ya que hay docenas de clones ddt por ahí.

+0

Es cierto, pero la mayoría de los perfiladores y depuradores utilizan cabeceras para enviar los datos desde el servidor al cliente (al mismo tiempo conservar una posible respuesta JSON), y una extensión del navegador para mostrarla . Han pasado 3 años desde su respuesta y DDT todavía no tiene esta funcionalidad :) –

4

He atacado este problema recientemente. Mi solución rápida y sucia pero funcional era simplemente agregar algunas vistas HTML para doblar el mismo código. ?

Así, por ejemplo, si puedo ver en NewRelic que el 90% del tiempo de mi página web se realizará en una llamada AJAX a/search_for_book title =, mi código podría tener este aspecto:

views.py: 

def search_for_book(request, title): 
    data = _search_for_book(title) 
    return json_response(data) 

def test_search_for_book(request, title): 
    data = _search_for_book(title) 
    return http_response(data) 

El cuello de botella estará en algún lugar del código _search_for_book; si lo llamamos por ajax es irrelevante para diagnosticar sus ineficiencias (en mi caso, al menos; YMMV)

10

escribí el Request History Panel for Django Debug Toolbar que se puede agregar a la barra de depuración de Django para ver las solicitudes que no sean la actual (incluyendo peticiones AJAX).


instalar a través de pip:

pip install git+https://github.com/djsutho/django-debug-toolbar-request-history.git 


En settings.py añadir 'ddt_request_history.panels.request_history.RequestHistoryPanel' a DEBUG_TOOLBAR_PANELS por ejemplo:

DEBUG_TOOLBAR_PANELS = [ 
    'ddt_request_history.panels.request_history.RequestHistoryPanel', # Here it is 
    'debug_toolbar.panels.versions.VersionsPanel', 
    'debug_toolbar.panels.timer.TimerPanel', 
    'debug_toolbar.panels.settings.SettingsPanel', 
    'debug_toolbar.panels.headers.HeadersPanel', 
    'debug_toolbar.panels.request.RequestPanel', 
    'debug_toolbar.panels.sql.SQLPanel', 
    'debug_toolbar.panels.templates.TemplatesPanel', 
    'debug_toolbar.panels.staticfiles.StaticFilesPanel', 
    'debug_toolbar.panels.cache.CachePanel', 
    'debug_toolbar.panels.signals.SignalsPanel', 
    'debug_toolbar.panels.logging.LoggingPanel', 
    'debug_toolbar.panels.redirects.RedirectsPanel', 
    'debug_toolbar.panels.profiling.ProfilingPanel', 
] 


Para grabar peticiones Ajax anulan SHOW_TOOLBAR_CALLBACK en DEBUG_TOOLBAR_CONFIG (también en settings.py) por ejemplo:

DEBUG_TOOLBAR_CONFIG = { 
    'SHOW_TOOLBAR_CALLBACK': 'ddt_request_history.panels.request_history.allow_ajax', 
} 
Cuestiones relacionadas