This is a pre-production deployment of Warehouse, however changes made here WILL affect the production instance of PyPI.
Latest Version Dependencies status unknown Test status unknown Test coverage unknown
Project Description

django-email-confirm-la

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_AUTOLOGIN = True
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_confirmation_confirm

In your models.py:

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

@receiver(post_email_confirmation_confirm)
def post_email_confirmation_confirm_callback(sender, confirmation, **kwargs):
    model_instace = confirmation.content_object
    email = confirmation.email
    old_email = kwargs['old_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 = {}
EMAIL_CONFIRM_LA_AUTOLOGIN = False

Run Tests

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

# or

$ docker build -t email_confirm_la .
$ docker run --rm=true -v `pwd`:/app email_confirm_la

Changes

2.3.0 (2016-09-09)

  • Support automatically login after email confirmation via EMAIL_CONFIRM_LA_AUTOLOGIN setting
  • Use uuid.uuid4() to generate confirmation key

2.2.0 (2016-07-25)

  • Fix migration dependencies
  • New parameter old_email in post_email_confirmation_confirm signal

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
Release History

Release History

2.3.0

This version

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

2.2.0

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

2.1.0

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

2.0.0

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.2.3

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.2.2

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.2.1

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.2.0

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.1.0

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

Download Files

Download Files

TODO: Brief introduction on what you do with files - including link to relevant help section.

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
django_email_confirm_la-2.3.0-py2-none-any.whl (22.8 kB) Copy SHA256 Checksum SHA256 2.7 Wheel Sep 9, 2016
django-email-confirm-la-2.3.0.tar.gz (15.1 kB) Copy SHA256 Checksum SHA256 Source Sep 9, 2016

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS HPE HPE Development Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting