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
If you're using Python 3.7, Django applications with channels
2.0 will be correctly instrumented. Older versions of Python will require the installation of aiocontextvars.
Install
Install sentry-sdk
from PyPI with the django
extra:
pip install --upgrade 'sentry-sdk[django]'
Configure
To configure the Sentry SDK, initialize it in your settings.py
file:
settings.py
import sentry_sdk
sentry_sdk.init(
dsn="https://examplePublicKey@o0.ingest.sentry.io/0",
enable_tracing=True,
)
Verify
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:
from django.urls import path
def trigger_error(request):
division_by_zero = 1 / 0
urlpatterns = [
path('sentry-debug/', trigger_error),
# ...
]
Behavior
Issue Reporting
- If you use
django.contrib.auth
and you've setsend_default_pii=True
in your call toinit
, 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).
Performance Monitoring
The following parts of your Django
- Middleware stack
- Signals
- Database queries
- Redis commands
- Access to Django caches
The parameter enable_tracing
needs to be set when initializing the Sentry SDK for performance measurements to be recorded.
Options
By adding DjangoIntegration
explicitly to your sentry_sdk.init()
call you can set options for DjangoIntegration
to change its behavior:
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=False,
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 settransaction_style="url"
."myproject.myview"
if you settransaction_style="endpoint"
.
The default is
"url"
.middleware_spans
:Create spans and track performance of all middleware in your Django
projectRepresents your service in Sentry and allows you to scope events to a distinct application.. Set toFalse
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
.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
False
to disable.The default is
True
.
Supported Versions
- 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+)
Our documentation is open source and available on GitHub. Your contributions are welcome, whether fixing a typo (drat!) to suggesting an update ("yeah, this would be better").
- Package:
- pypi:sentry-sdk
- Version:
- 1.38.0
- Repository:
- https://github.com/getsentry/sentry-python
- API Documentation:
- https://getsentry.github.io/sentry-python/