domingo, 31 de diciembre de 2023

21.- Barra de Herramientas de depuración de Django.


Usando la barra de herramientas de depuración de Django.


En este punto, ya estarás familiarizado con la página de depuración de Django. A lo largo de los capítulos anteriores, has visto varias veces la distintiva página de depuración de Django, amarilla y gris. Aparece en cuanto ejecutas el servidor de desarrollo y se detecta algún error en el código.

La página de depuración de Django proporciona información útil para la depuración. Sin embargo, existe una aplicación externa de Django que incluye información de depuración más detallada y puede ser realmente útil durante el desarrollo.

Django Debug Toolbar es una aplicación externa de Django que te permite ver información relevante de depuración sobre el ciclo actual de solicitud y respuesta. La información se divide en múltiples paneles que muestran información diferente, incluyendo datos de solicitud/respuesta (request/response), versiones de paquetes de Python utilizados, tiempo de ejecución, configuraciones, encabezados, consultas SQL, plantillas utilizadas, caché, señales y registro.

Puedes encontrar la documentación para Django Debug Toolbar en https://django-debug-toolbar.readthedocs.io/.


Instalando la barra de depuración de Django.


Instala la barra de depuración via pip usando el siguiente comando:

pip install django-debug-toolbar

Edita el archivo settings.py de tu proyecto y agrega debug_toolbar a la configuración INSTALLED_APPS, de la siguiente manera:
INSTALLED_APPS = [
# ...
'debug_toolbar',
]

En el mismo archivo, agrega la siguiente línea resaltada en negrita a la configuración MIDDLEWARE:

MIDDLEWARE = [
    'debug_toolbar.middleware.DebugToolbarMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

La barra de herramientas de depuración de Django se implementa principalmente como middleware. El orden de MIDDLEWARE es importante. DebugToolbarMiddleware debe colocarse antes que cualquier otro middleware, excepto los middleware que codifican el contenido de la respuesta, como GZipMiddleware, que, si está presente, debería ir primero.

Añade las siguientes líneas al final del archivo settings.py de la aplicación principal:

# Django debug toolbar
INTERNAL_IPS = [
'127.0.0.1',
]

La barra de herramientas de depuración de Django solo se mostrará si tu dirección IP coincide con una entrada en la configuración INTERNAL_IPS. Para evitar mostrar información de depuración en producción, Django Debug Toolbar verifica que la configuración DEBUG esté en True.

Edita el archivo urls.py principal de tu proyecto y agrega el siguiente patrón de URL resaltado en negrita a las urlpatterns:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('Proyecto_web_app.urls')),
    path('servicios/', include('Servicios.urls')),
    path('blog/', include('Blog.urls')),
    path('contacto/', include('Contacto.urls')),
    path('sitemap.xml', sitemap, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap'),
    path('tienda/', include('Tienda.urls')),
    path('carro/', include('Carro.urls')),
    path('cuenta/', include('Autentificacion.urls')),
    path('social-auth/', include('social_django.urls', namespace='social')),
    path('orders/', include('Orders.urls', namespace='orders')),
    path('__debug__/', include('debug_toolbar.urls')),
]


La barra de herramientas de depuración de Django está ahora instalada en tu proyecto. ¡Probémosla!

Ejecuta el servidor de desarrollo con el siguiente comando:

python manage.py runserver

Abre http://127.0.0.1:8000/tienda/ en tu navegador. Ahora deberías ver una barra lateral plegable a la derecha. Debería verse de la siguiente manera:


imagen panel de depuración a la derecha


Si la barra no aparece, comprueba el log de la consola de runserver. Si ves un error de tipo MIME, es muy probable que tu mapa de archivos MIME sea incorrecto o necesite actualizarse.

Puede aplicar la asignación correcta para archivos JavaScript y CSS agregando las siguientes líneas al archivo settings.py:

PracticaDjango/PracticaDjango/settings.py

if DEBUG:
    import mimetypes
    mimetypes.add_type('application/javascript', '.js', True)
    mimetypes.add_type('text/css', '.css', True)


Paneles de la barra de depuración de Django.

La barra de herramientas de depuración de Django cuenta con múltiples paneles que organizan la información de depuración para el ciclo de solicitud(request) y respuesta(response). La barra lateral contiene enlaces a cada panel, y puedes usar la casilla de verificación de cualquier panel para activarlo o desactivarlo. El cambio se aplicará a la siguiente solicitud. Esto es útil cuando no estamos interesados en un panel específico, pero el cálculo agrega demasiada carga a la solicitud.

Haz clic en 'Tiempo' en el menú lateral. Verás el siguiente panel:

Panel, pestaña Tiempo desplegada


Imagen del panel

El panel de Tiempo incluye un temporizador para las diferentes fases del ciclo de solicitud/respuesta. También muestra la CPU, el tiempo transcurrido y el número de cambios de contexto. Si estás utilizando Windows, no podrás ver el panel de Tiempo. En Windows, solo está disponible y se muestra el tiempo total en la barra de herramientas.

Haz clic en 'SQL' en el menú lateral. Verás el siguiente panel:


Panel, SQL desplegado

Aquí puedes ver las diferentes consultas SQL que se han ejecutado. Esta información puede ayudarte a identificar consultas innecesarias, consultas duplicadas que se pueden reutilizar o consultas de larga duración que se pueden optimizar. Según tus hallazgos, puedes mejorar los QuerySets en tus vistas, crear nuevos índices en campos del modelo si es necesario o almacenar en caché información cuando sea necesario.

Haz clic en 'Plantillas' en el menú lateral. Verás el siguiente panel:

Panel plantilla desplegado

Este panel muestra las diferentes plantillas utilizadas al renderizar el contenido, las rutas de las plantillas y el contexto utilizado. También puedes ver los diferentes procesadores de contexto utilizados.

Haz clic en 'Señales' en el menú lateral. Verás el siguiente panel:

Panel, Señales desplegado


En este panel, puedes ver todas las señales registradas en tu proyecto y las funciones receptoras adjuntas a cada señal.

Hemos revisado algunos de los paneles que vienen con la barra de herramientas de depuración de Django. Además de los paneles integrados, puedes encontrar paneles adicionales de terceros que puedes descargar y usar en https://django-debugtoolbar.readthedocs.io/en/latest/panels.html#third-party-panels.

Comandos de la barra de herramientas de depuración de Django

Además de los paneles de depuración de solicitud/respuesta, la barra de herramientas de depuración de Django proporciona un comando de gestión para depurar SQL en llamadas ORM. El comando de gestión debugsqlshell replica el comando de consola de Django, pero muestra declaraciones SQL para consultas realizadas con el ORM de Django.

Abre la consola con el siguiente comando:

python manage.py debugsqlshell

Ejecuta el siguiente código:

Python 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0] on linux Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>> from Tienda.models import Producto >>> Producto.objects.get(id=1)

Verás la siguiente salida:

SELECT oid, typarray FROM pg_type WHERE typname = 'hstore' [1.06ms] SELECT oid, typarray FROM pg_type WHERE typname = 'citext' [0.50ms] SELECT "Tienda_producto"."id", "Tienda_producto"."nombre", "Tienda_producto"."slug", "Tienda_producto"."categoria_id", "Tienda_producto"."descripcion", "Tienda_producto"."precio", "Tienda_producto"."stock", "Tienda_producto"."imagen", "Tienda_producto"."created", "Tienda_producto"."updated" FROM "Tienda_producto" WHERE "Tienda_producto"."id" = 1 LIMIT 21 [1.69ms] <Producto: NBA2K23>

Puedes utilizar este comando para probar consultas ORM antes de añadirlas a tus vistas. Podrás revisar la declaración SQL resultante y el tiempo de ejecución de cada llamada ORM.

Puedes encontrar el código de este capítulo en este enlace de GITHUB

No hay comentarios:

Publicar un comentario