Drip campaigns are pre-written sets of emails sent to customers or prospects over time. Django Drips lets you use the admin to manage drip campaign emails using querysets on Django's User model.
This project is a fork of the one written by Zapier.
pip install django-drip-campaigns
'drip'
to your INSTALLED_APPS
list on your settings.INSTALLED_APPS = [
'django.contrib.contenttypes',
'django.contrib.comments',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.admin',
# ...
'drip',
]
(Optional) Set DRIP_FROM_EMAIL = '<your_app_from_email>'
in your settings, where <your_app_from_email>
is the email account that is going to be shown in the sent emails. Otherwise EMAIL_HOST_USER
value will be used.
Finally, run python manage.py migrate drip
to set up the necessary database tables.
If you haven't, create a superuser with the Django createsuperuser command. Login with the admin user, and select Drips
to manage them. You will be able to:
Now you can also manage campaigns, select Campaigns
to manage them. You will be able to:
In the Django admin, after select Campaigns
, you can click on ADD CAMPAIGN +
button to create a new one. You will see the add campaign
page:
When you create a campaign, you need to decide if the related drips will be deleted along with the campaign, using the Delete drips
field.
Here you will find an inline creation or edition for Drips
this will not include the QUERY SET RULES
section. It will only allow you to change the mail content in the Drip.
Campaigns will allow you to manage many Drips that need to be related between them.
In the Django admin, after select Drips
, you can click on ADD DRIP +
button to create a new one. You will see the add drip
page:
Here you can relate the Drip to the corresponding Campaign
. Grouping several drips under a campaign.
On the FIELD NAME OF USER
input, when you click on it, you will be able to view:
Please take a look a this example:
With this, you can select one or more fields to create useful drips.
Additionally if you select a field name of user that has a date type, you can enter in the FIELD VALUE
input, a date value written in natural language that combines operations on the current datetime.
For example, if you have selected the field last_login
that has a date type, and you want to create a drip to send emails to the users who logged in exactly one week ago; you can enter:
now-1 week
or
now- 1 w
Possible operations and values:
+
) or subtract (-
) dates.now
.seconds
or s
.minutes
or m
.hours
or h
.days
or d
.weeks
or w
.1
, you can write second
, minute
, etc.now
and the operation symbol. Optionally you can add (or not) a space around the number value.Let's see some examples of the date values that you can enter:
now-1 day
now+ 8days
now+ 1 h
now-4hours
now- 3 weeks
now-1 weeks
In the Django admin, you can select a drip and then click on the VIEW TIMELINE
button to view the mails expected to be sent with the corresponding receivers:
To send the created and enabled drips, run the command:
python manage.py send_drips
You can use cron to schedule the drips.
You may want to have an easy way to send drips periodically. It's possible to set a couple of parameters in your settings to do that. First activate the scheduler by adding the DRIP_SCHEDULE_SETTINGS
dictionary:
# your settings file
DRIP_SCHEDULE_SETTINGS = {
'DRIP_SCHEDULE': True,
}
After that, choose:
0-6
, or a string: 'mon'
, 'tue'
, 'wed'
, 'thu'
, 'fri'
, 'sat'
, 'sun'
. The name in the settings is DRIP_SCHEDULE_DAY_OF_WEEK
(default is set to 0
).0-23
. The name in the settings is DRIP_SCHEDULE_HOUR
(default is set to 0
).0-59
. The name in the settings is DRIP_SCHEDULE_MINUTE
(default is set to 0
).With those values, a cron scheduler will execute the send_drips
command every week in the specified day/hour/minute. The scheduler will use the timezone of your TIME_ZONE
parameter in your settings (default is set to 'UTC'
). For example, if you have:
DRIP_SCHEDULE_SETTINGS = {
'DRIP_SCHEDULE': True,
'DRIP_SCHEDULE_DAY_OF_WEEK': 'mon',
'DRIP_SCHEDULE_HOUR': 13,
'DRIP_SCHEDULE_MINUTE': 57,
}
Then every Monday at 13:57 the send_drips
command will be executed.
Last but not least, add this line at the end of your main urls.py
file to start the scheduler:
# your main urls.py file
...
from drip.scheduler.cron_scheduler import cron_send_drips
...
cron_send_drips()
We recommend you to do it there because we know for sure that it's a file that is executed once at the beginning.
Some tips:
'*'
.DRIP_SCHEDULE_DAY_OF_WEEK
to more than one value. For example, if you set that to 'mon-fri'
the command will be executed from Monday to Friday.IMPORTANT: We use Celery 5.2.2 that supports Django 1.11 LTS or newer versions.
If you need to use celery it can be configured in the same way you just need to add the following key SCHEDULER
setted as "CELERY"
:
DRIP_SCHEDULE_SETTINGS = {
'DRIP_SCHEDULE': True,
'DRIP_SCHEDULE_DAY_OF_WEEK': 'mon',
'DRIP_SCHEDULE_HOUR': 13,
'DRIP_SCHEDULE_MINUTE': 57,
'SCHEDULER': "CELERY",
}
The default value of this key is "CRON"
, if you enable DRIP_SCHEDULE
it will work with a Cron by default.
In order to make this happen, the project's celery.py
setup shall invoke the
autodiscoverttasks
function. This task is scheduled with a simple
Celery beat configuration.
Version | Tag | Published |
---|---|---|
1.16.2 | 6mos ago | |
1.15.3 | 6mos ago | |
1.15.2 | 6mos ago | |
1.15.1 | 6mos ago |