A Django library that asynchronously triggers actions based on database changes. Supports webhook integration, message brokers (Kafka, RabbitMQ), and flexible configurations.
MIT License
In Django, signals are a powerful tool for responding to changes in your models or other parts of the application. Typically, you define signals in a signals.py file, specifying actions to take when certain events occur, like saving or deleting an object. While this approach works well in many cases, it can have some limitations:
This application is highly flexible and can be configured via code or through the Django admin interface.
In Django, signals are typically hardcoded in a signals.py
file, where you define logic like "if this happens, do that." While this works well for many cases, it introduces a few limitations:
Django Action Triggers builds on Django’s signals by offering more flexibility at runtime. It allows you to create, modify, or remove signals and actions dynamically—without needing to change your code. This can all be done through the UI or API, making it easier to manage triggers and actions as your application evolves.
With Django Action Triggers, you can:
Django Action Triggers also includes out-of-the-box support for popular services such as AWS SNS, RabbitMQ, Kafka, and more. This allows you to easily send messages to these services, streamlining integrations without needing custom code.
In summary, Django Action Triggers provides a dynamic, maintainable and scalable way to manage actions triggered by signals. It reduces the need for constant code changes while offering simple integration with popular external services.
For detailed documentation, including setup, configuration options, API specifications, and more examples, please refer to the official documentation.
Need support for another message broker or action? Please submit a feature request on the GitHub repository.
To install the package, run the following command:
pip install django-action-triggers
This command above will only install the base library, in order to support specific integrations, you can install the following extras:
Integration | Installation Command |
---|---|
RabbitMQ | pip install django-action-triggers[rabbitmq] |
Kafka | pip install django-action-triggers[kafka] |
Redis | pip install django-action-triggers[redis] |
AWS SQS | pip install django-action-triggers[aws] |
AWS SNS | pip install django-action-triggers[aws] |
GCP Pub/Sub | pip install django-action-triggers[gcp] |
AWS Lambda | pip install django-action-triggers[aws] |
Webhooks | pip install django-action-triggers[webhooks] |
Then, add the following to your INSTALLED_APPS
in your Django settings:
INSTALLED_APPS = [
...
'action_triggers',
...
]
If you plan on using the API, add the following to your urls.py
:
from django.urls import path, include
urlpatterns = [
...
path('api/action-triggers/', include('action_triggers.urls')),
...
]
Once installed, you can create triggers and actions using the Django admin interface or programmatically through the API.
For detailed usage instructions, configuration options, and examples, please refer to the official documentation.
Trigger a webhook whenever a User
model is created, updated, or deleted:
{
"config_signals": [
{"signal": "post_save"},
{"signal": "post_delete"}
],
"content_types": [
{
"app_label": "auth",
"model_name": "User"
}
],
"webhooks": [
{
"url": "https://my-webhook.com",
"http_method": "POST",
"headers": {
"Authorization": "Bearer {{ myapp.utils.get_token }}"
},
"timeout_secs": 22.5
}
],
"active": true
}
Trigger multiple webhooks and add messages to queues when Product
or Sale
models are created or updated:
{
"config_signals": [
{"signal": "post_save"}
],
"content_types": [
{
"app_label": "myapp",
"model_name": "Product"
},
{
"app_label": "myapp",
"model_name": "Sale"
}
],
"webhooks": [
{
"url": "https://my-webhook.com",
"http_method": "POST",
"headers": {
"Authorization": "Bearer {{ myapp.utils.get_token }}"
},
"timeout_secs": 10.5
},
{
"url": "https://my-other-webhook.com",
"http_method": "POST",
"headers": {
"Authorization": "Bearer {{ myapp.utils.get_token }}"
}
}
],
"msg_broker_queues": [
{
"name": "my-msg-broker-config",
"parameters": {
"product_id": "{{ myapp.utils.get_product_id }}"
},
"timeout_secs": 2.5
},
{
"name": "my-other-msg-broker-config",
"parameters": {
"sale_id": "{{ myapp.utils.get_sale_id }}"
}
}
],
"active": true
}
If you have any feature requests or issues, please submit them to the GitHub repository. This also helps us prioritise new features and bug fixes.
This project is licensed under the MIT License - see LICENSE file for details.