Skip to main content

Django email confirmation for any Model and any Field.

Project description

django-email-confirm-la

http://img.shields.io/travis/vinta/django-email-confirm-la/master.svg?style=flat-square https://img.shields.io/coveralls/vinta/django-email-confirm-la/master.svg?style=flat-square http://img.shields.io/pypi/v/django-email-confirm-la.svg?style=flat-square

Django email confirmation for any Model and any Field.

Requirements

  • Python (2.6, 2.7, 3.3, 3.4, 3.5)

  • Django (1.5, 1.6, 1.7, 1.8, 1.9)

Installation

$ pip install django-email-confirm-la

In your settings.py:

Add the email_confirm_la app (put it after your apps) and set the required settings:

INSTALLED_APPS = (
    ...
    'your_app',
    'email_confirm_la',
    ...
)

EMAIL_CONFIRM_LA_HTTP_PROTOCOL = 'https'
EMAIL_CONFIRM_LA_DOMAIN = 'vinta.ws'
EMAIL_CONFIRM_LA_TEMPLATE_CONTEXT = {
    'THE_ANSWER': 42,
}

If you are using the sites framework, then EMAIL_CONFIRM_LA_DOMAIN can be omitted and Site.objects.get_current().domain will be used.

In your urls.py:

urlpatterns = [
    ...
    url(r'^email_confirmation/', include('email_confirm_la.urls', namespace='email_confirm_la')),
    ...
]

then run

$ python manage.py migrate

Models

For User Model

from django.contrib.auth.models import User
from email_confirm_la.models import EmailConfirmation

user = User.objects.get(username='vinta')
email = 'vinta.chen@gmail.com'
EmailConfirmation.objects.verify_email_for_object(email, user)

For Any Model And Any Field

Assumed you have a model:

from django.db import models
from django.contrib.contenttypes.fields import GenericRelation  # Django 1.7+
from django.contrib.contenttypes.generic import GenericRelation

class YourModel(models.Model):
    ...
    customer_support_email = models.EmailField(max_length=255, null=True, blank=True)
    marketing_email = models.EmailField(max_length=255, null=True, blank=True)
    ...

    # optional, but recommended when you want to perform cascade-deletions
    email_confirmations = GenericRelation('email_confirm_la.EmailConfirmation', content_type_field='content_type', object_id_field='object_id')

And you want to verify some emails:

from your_app.models import YourModel
from email_confirm_la.models import EmailConfirmation

some_model_instance = YourModel.objects.get(id=42)

EmailConfirmation.objects.verify_email_for_object(
    email='marvin@therestaurantattheendoftheuniverse.com',
    content_object=some_model_instance,
    email_field_name='customer_support_email'
)

EmailConfirmation.objects.verify_email_for_object(
    email='arthur.dent@therestaurantattheendoftheuniverse.com',
    content_object=some_model_instance,
    email_field_name='marketing_email'
)

Signals

  • post_email_confirmation_send

  • post_email_confirm

  • post_email_save

In your models.py:

from django.dispatch import receiver
from email_confirm_la.signals import post_email_confirm

@receiver(post_email_confirm)
def post_email_confirm_callback(sender, confirmation, **kwargs):
    model_instace = confirmation.content_object
    email = confirmation.email

    do_your_stuff()

Commands

$ python manage.py clear_expired_email_confirmations

Templates

You will want to override the project’s email message and confirmation pages.

Ensure the email_confirm_la app in INSTALLED_APPS is after the app that you will place the customized templates in so that the django.template.loaders.app_directories.Loader finds your templates first.

There are following template that you can override:

  • email_confirm_la/email/email_confirmation_subject.txt: Produces the subject line of the email.

  • email_confirm_la/email/email_confirmation_message.html: The HTML body of the email.

  • email_confirm_la/email_confirmation_success.html: What the user sees after clicking a confirmation link (on success).

  • email_confirm_la/email_confirmation_fail.html: What the user sees after clicking a invalid confirmation link.

  • email_confirm_la/email_confirmation_expiration.html: What the user sees after clicking an expired confirmation link.

Settings

Default values of app settings:

EMAIL_CONFIRM_LA_HTTP_PROTOCOL = 'http'
EMAIL_CONFIRM_LA_DOMAIN = 'example.com'
EMAIL_CONFIRM_LA_CONFIRM_EXPIRE_SEC = 60 * 60 * 24 * 1  # 1 day
EMAIL_CONFIRM_LA_CONFIRM_URL_REVERSE_NAME = 'email_confirm_la:confirm_email'
EMAIL_CONFIRM_LA_TEMPLATE_CONTEXT = {}

Run Tests

$ pip install -r requirements_test.txt
$ python setup.py test

# or

$ docker build -t djecla .
$ docker run --rm=true djecla

Changes

2.1.0 (2016-07-25)

  • Reset migration

  • Fix EmailConfirmationValidator

2.0.0 (2016-07-22)

  • v2.0.0 is a BACKWARD-INCOMPATIBLE release!

  • Full refactoring

  • Drop support for Django 1.4

0.2.3 (2015-03-08)

  • Fix #14 Admin raises an AttributeError when content_object doesn’t exist

0.2.2 (2014-11-13)

  • New admin action: Re-send confirmation email

  • New setting: EMAIL_CONFIRM_LA_EMAIL_BACKEND

  • Change EMAIL_CONFIRM_LA_DOMAIN default value to '', fail fast

  • Fix circular import

0.2.1 (2014-11-09)

  • Django 1.6 compatibility: transaction.atomic

  • Django 1.4 compatibility: update_fields

0.2.0 (2014-11-08)

  • Django 1.7 compatibility: migrations

0.1.0 (2014-10-31)

  • Initial release

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-email-confirm-la-2.1.0.tar.gz (14.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_email_confirm_la-2.1.0-py2-none-any.whl (22.5 kB view details)

Uploaded Python 2

File details

Details for the file django-email-confirm-la-2.1.0.tar.gz.

File metadata

File hashes

Hashes for django-email-confirm-la-2.1.0.tar.gz
Algorithm Hash digest
SHA256 42908a320e271f4e447bb76dcecdf80a1d3cc040e5f63889d976d263f98b45e6
MD5 fe4aae3091bec4407de3e980d2ccbf9a
BLAKE2b-256 27fbd29b38773a4e2917bdbaed7c66bd8d747e7994b7314530525924657f8052

See more details on using hashes here.

File details

Details for the file django_email_confirm_la-2.1.0-py2-none-any.whl.

File metadata

File hashes

Hashes for django_email_confirm_la-2.1.0-py2-none-any.whl
Algorithm Hash digest
SHA256 85777754c42f98a952f57d0dcb4c2d39c83eea304b5603883c0f637335051edb
MD5 bbd2ed0098a9b24b72b96db2537b7876
BLAKE2b-256 8dd2c0784306e321b4914e409bbcbb30693363fb6834c3343a71d7acb574dbdc

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page