Django email confirmation for any Model and any Field.
Project description
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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Filename, size | File type | Python version | Upload date | Hashes |
---|---|---|---|---|
Filename, size django_email_confirm_la-2.3.0-py2-none-any.whl (22.8 kB) | File type Wheel | Python version 2.7 | Upload date | Hashes View |
Filename, size django-email-confirm-la-2.3.0.tar.gz (15.1 kB) | File type Source | Python version None | Upload date | Hashes View |
Hashes for django_email_confirm_la-2.3.0-py2-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 759e2397ca2a58c63c032ac73f70c25dd8c92e5e56212440c0b18490ad15525b |
|
MD5 | b97908c52f48f37291a9a27a35fb0baa |
|
BLAKE2-256 | 55fd799805427fd3844c0424d956150dde787bd4e8f989f4a83a42982eab29c6 |
Hashes for django-email-confirm-la-2.3.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1ef54d2a86d744ad428d0ebfa4edf90d749b63e6bb6c503aed655b7bbe824c14 |
|
MD5 | 4a2231570613886c22348780ee95f81b |
|
BLAKE2-256 | 92ee308ed45c688ef6ffb286d16c4651568264672ac6e34ffd82a10cc41ff3f9 |