Skip to content

💧 Use Django admin to manage drip campaign emails using querysets on Django's User model.

License

Notifications You must be signed in to change notification settings

awhileback/django-drip-campaigns

 
 

Repository files navigation

Maintainability Test Coverage License: MIT

Django Drip Campaigns

Build Status

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.

You can check out the docs here.

Installation:

  1. Install django-drip-campaings using pip:
pip install django-drip-campaigns
  1. Add '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',
]
  1. (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.

  2. Finally, run python manage.py migrate drip to set up the necessary database tables.

Usage

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:

  • View created drips.
  • Create a new drip.
  • Select and delete drips.

Create Drip

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:

Add Drip

On the FIELD NAME OF USER input, when you click on it, you will be able to view:

  • The fields of your user's model.
  • The fields of your user's model in other models that are related with it.

Please take a look a this example:

Lookup fields

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:

  • Add (+) or subtract (-) dates.
  • On the left side of the operation, write the current datetime value: now.
  • On the right side of the operation:
    • seconds or s.
    • minutes or m.
    • hours or h.
    • days or d.
    • weeks or w.
    • If you enter the number 1, you can write second, minute, etc.
    • Don't enter a space between 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

View Timeline

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:

Timeline

Send drips

To send the created and enabled drips, run the command:

python manage.py send_drips

You can use cron to schedule the drips.

The cron scheduler

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:

  • A day of the week: An integer value between 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).
  • An hour: An integer value between 0-23. The name in the settings is DRIP_SCHEDULE_HOUR (default is set to 0).
  • A minute: An integer value between 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:

  • If you want to run the command every day in the week, hour, or minute, just set the corresponding parameter to '*'.
  • If you want to run the command more than a day in the week, just set the 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.

About

💧 Use Django admin to manage drip campaign emails using querysets on Django's User model.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 93.7%
  • Makefile 2.3%
  • Batchfile 2.1%
  • HTML 1.9%