Last modified: Mar 11, 2025 By Alexander Williams

Django Rest Framework Signals and Webhooks

Real-time notifications are essential for modern web applications. They keep users informed about important events. Django Rest Framework (DRF) offers powerful tools like signals and webhooks to achieve this.

What Are Django Signals?

Django signals allow certain senders to notify receivers when specific actions occur. They are useful for decoupling code. For example, you can trigger a signal when a new user is created.

Here’s how to use Django signals:


    from django.db.models.signals import post_save
    from django.dispatch import receiver
    from django.contrib.auth.models import User

    @receiver(post_save, sender=User)
    def send_welcome_email(sender, instance, created, **kwargs):
        if created:
            print(f"Welcome email sent to {instance.email}")
    

In this example, a welcome email is sent when a new user is created. The post_save signal is triggered after the user is saved.

What Are Webhooks?

Webhooks are user-defined HTTP callbacks. They are triggered by specific events. When an event occurs, the source site makes an HTTP request to the URL configured for the webhook.

Webhooks are commonly used for real-time notifications. For example, you can notify an external service when a new order is placed.

Implementing Webhooks in Django Rest Framework

To implement webhooks, you need to create an endpoint that listens for events. Then, send a POST request to the webhook URL when the event occurs.

Here’s an example:


    import requests
    from django.db.models.signals import post_save
    from django.dispatch import receiver
    from .models import Order

    @receiver(post_save, sender=Order)
    def notify_external_service(sender, instance, created, **kwargs):
        if created:
            webhook_url = "https://example.com/webhook"
            data = {"order_id": instance.id, "status": "created"}
            requests.post(webhook_url, json=data)
    

In this example, a webhook is triggered when a new order is created. The external service receives the order details in real-time.

Combining Signals and Webhooks

Signals and webhooks can be combined for powerful real-time notifications. For example, you can use a signal to trigger a webhook when a specific event occurs.

Here’s how to combine them:


    from django.db.models.signals import post_save
    from django.dispatch import receiver
    from .models import Product
    import requests

    @receiver(post_save, sender=Product)
    def notify_product_update(sender, instance, created, **kwargs):
        webhook_url = "https://example.com/product-webhook"
        data = {"product_id": instance.id, "action": "created" if created else "updated"}
        requests.post(webhook_url, json=data)
    

This code sends a webhook when a product is created or updated. The external service is notified in real-time.

Best Practices for Using Signals and Webhooks

When using signals and webhooks, follow these best practices:

  • Keep signal handlers lightweight. Avoid long-running tasks.
  • Use Celery for asynchronous tasks.
  • Secure your webhooks with authentication.

Conclusion

Django Rest Framework signals and webhooks are powerful tools for real-time notifications. They help you keep users informed and integrate with external services. By following best practices, you can build efficient and secure systems.

For more advanced topics, check out our guide on deploying DRF APIs to production or learn about API testing in DRF.