Django

Sentry's Django integration adds support for the Django framework. It enables automatic reporting of errors and exceptions as well as performance monitoring. In order to get started using the integration, you should have a Sentry account and a project set up.

Install sentry-sdk from PyPI with the django extra:

Copied
pip install --upgrade 'sentry-sdk[django]'

To configure the Sentry SDK, initialize it in your settings.py file:

settings.py
Copied
import sentry_sdk

sentry_sdk.init(
    dsn="https://examplePublicKey@o0.ingest.sentry.io/0",
    enable_tracing=True,
)

The snippet below includes an intentional error that will be captured by Sentry when triggered. This will allow you to make sure that everything is working as soon as you set it up:

Copied
from django.urls import path

def trigger_error(request):
    division_by_zero = 1 / 0

urlpatterns = [
    path('sentry-debug/', trigger_error),
    # ...
]

  • If you use django.contrib.auth and you've set send_default_pii=True in your call to init, user data (such as current user id, email address, username) will be attached to error events.
  • Request data will be attached to all events: HTTP method, URL, headers, form data, JSON payloads. Sentry excludes raw bodies and multipart file uploads.
  • Logs emitted by any logger will be recorded as breadcrumbs by the Logging integration (this integration is enabled by default).

The following parts of your Django project are monitored:

  • Middleware stack
  • Signals
  • Database queries
  • Redis commands
  • Access to Django caches

By adding DjangoIntegration explicitly to your sentry_sdk.init() call you can set options for DjangoIntegration to change its behavior:

Copied
import django.db.models.signals

import sentry_sdk
from sentry_sdk.integrations.django import DjangoIntegration

sentry_sdk.init(
    dsn="https://examplePublicKey@o0.ingest.sentry.io/0",
    # ...
    integrations=[
        DjangoIntegration(
            transaction_style='url',
            middleware_spans=True,
            signals_spans=True,
            signals_denylist=[
                django.db.models.signals.pre_init, 
                django.db.models.signals.post_init,
            ],
            cache_spans=False,
        ),
    ],
)

You can pass the following keyword arguments to DjangoIntegration():

  • transaction_style:

    How to name transactions showing up in Sentry performance monitoring.

    • "/myproject/myview/<foo>" if you set transaction_style="url".
    • "myproject.myview" if you set transaction_style="endpoint".

    The default is "url".

  • middleware_spans:

    Create spans and track performance of all middleware in your Django project. Set to False to disable.

    The default is True.

  • signals_spans:

    Create spans and track performance of all synchronous Django signals receiver functions in your Django project. Set to False to disable.

    The default is True.

  • signals_denylist:

    A list of signals to exclude from performance tracking. No spans will be created for these.

    The default is [].

  • cache_spans:

    Create spans and track performance of all read operations to configured caches. The spans also include information if the cache access was a hit or a miss. Set to True to enable.

    The default is False.

  • Django 1.8-1.11 (Python: 2.7+)
  • Django 2.x (Python: 3.5+)
  • Django 3.x (Python: 3.6+)
  • Django 4.x (Python: 3.8+)
  • Django 5.x (Python: 3.10+)
Help improve this content
Our documentation is open source and available on GitHub. Your contributions are welcome, whether fixing a typo (drat!) or suggesting an update ("yeah, this would be better").