Django email confirmation for any Model and any Field.
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_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.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.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file django-email-confirm-la-2.0.0.tar.gz.
File metadata
- Download URL: django-email-confirm-la-2.0.0.tar.gz
- Upload date:
- Size: 14.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d2a73c740ab1eaceacb812d8a5a5df2b3f20a8ed5380cc6d90b83cc153af824a
|
|
| MD5 |
103d426ffcc4854644e11eda61a2b6fb
|
|
| BLAKE2b-256 |
1565c049aa0bcae5ebbd39d8fee71eb5cf4e8934792c6954cac79d47cde4ee8c
|
File details
Details for the file django_email_confirm_la-2.0.0-py2-none-any.whl.
File metadata
- Download URL: django_email_confirm_la-2.0.0-py2-none-any.whl
- Upload date:
- Size: 22.4 kB
- Tags: Python 2
- Uploaded using Trusted Publishing? No
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
33148aef4684691660fc0d5b6feb0dd9d67e0ecf70ef05949128382cb10d8ab9
|
|
| MD5 |
d2c298d3e2855d8915bf91b28fbd9417
|
|
| BLAKE2b-256 |
bb5b60d29c9671f2dd9170c4aebd55b48c88d55397aa5ceda41c1a375d24cb10
|