• Stars
    star
    170
  • Rank 223,357 (Top 5 %)
  • Language
    Python
  • Created over 11 years ago
  • Updated 11 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Simple email confirmation for django.

django-simple-email-confirmation

A Django app providing simple email confirmation.

This app can be used to support three different ways of organizing your Users their email address(es). Each email address can be in a confirmed/unconfirmed state.

  • Users have one email address that is stored on the User
  • Users have one primary email address stored on the User model, and have N secondary emails stored in EmailAddress objects
  • Users have N email addresses stored in EmailAddress objects.

Examples

Create a new User, confirm their email:

from django.core.mail import send_mail
# ...

email = '[email protected]'
user = User.objects.create_user(email, email=email)
user.is_confirmed # False

send_mail(email, 'Use %s to confirm your email' % user.confirmation_key)
# User gets email, passes the confirmation_key back to your server

user.confirm_email(user.confirmation_key)
user.is_confirmed # True

Add another email to an existing User, confirm it, then set it as their primary.

new_email = '[email protected]'
confirmation_key = user.add_unconfirmed_email(new_email)
new_email in user.unconfirmed_emails # True

send_mail(new_email, 'Use %s to confirm your new email' % confirmation_key)
# User gets email, passes the confirmation_key back to your server

user.confirm_email(confirmation_key)
new_email in user.confirmed_emails # True

user.set_primary_email(new_email)
user.email # [email protected]

Installation

  1. From pypi using pip:

    pip install django-simple-email-confirmation
  2. Add simple_email_confirmation to your settings.INSTALLED_APPS:

    INSTALLED_APPS = (
        ...
        'simple_email_confirmation',
        ...
    )
  3. Add the provided mixin to your django 1.5+ custom user model:

    from django.contrib.auth.models import AbstractUser
    from simple_email_confirmation.models import SimpleEmailConfirmationUserMixin
    
    class User(SimpleEmailConfirmationUserMixin, AbstractUser):
        pass

    Note: you don't strictly have to do this final step. Without this, you won't have the nice helper functions and properties on your User objects but the remainder of the app should function fine.

  4. Change default settings (optional):

    By default, keys don't expire. If you want them to, set settings.SIMPLE_EMAIL_CONFIRMATION_PERIOD to a timedelta.

    from datetime import timedelta
    
    EMAIL_CONFIRMATION_PERIOD_DAYS = 7
    SIMPLE_EMAIL_CONFIRMATION_PERIOD = timedelta(days=EMAIL_CONFIRMATION_PERIOD_DAYS)

    By default, auto-add unconfirmed EmailAddress objects for new Users. If you want to change this behaviour, set settings.SIMPLE_EMAIL_CONFIRMATION_AUTO_ADD to False.

    SIMPLE_EMAIL_CONFIRMATION_AUTO_ADD = False

    By default, a length of keys is 12. If you want to change it, set settings.SIMPLE_EMAIL_CONFIRMATION_KEY_LENGTH to integer value (maximum 40).

    SIMPLE_EMAIL_CONFIRMATION_KEY_LENGTH = 16

    You are able to override the EmailAddress model provided with this app. This works in a similar fashion as Django's custom user model and allows you to add fields to the EmailAddress model, such as a uuid, or define your own model completely. To set a custom email address model, set settings.SIMPLE_EMAIL_CONFIRMATION_EMAIL_ADDRESS_MODEL to the model you would like to use in the <app_label>.<model_name> fashion.

    An admin interface is included with simple email confirmation. Although, it is designed to work with the EmailAddress provided. Functionality with the admin cannot be guaranteed when a custom model is used so it is recommended you provide your own admin definition.

    Note for existing apps that already use the provided model:

    Similar to Django's custom user model, migrating a custom email address model after the default one is already migrated is not supported and could have unforeseen side effects. The recommendation is to use a custom model from the beginning of development.

    SIMPLE_EMAIL_CONFIRMATION_EMAIL_ADDRESS_MODEL = 'yourapp.EmailAddress'

Migrating

0.23 to 1.0

A number of backwards incompatible changes are included in the 1.0 release.

  • Signal arguments have been refactored. Now, the email_confirmed, unconfirmed_email_created, and primary_email_changed signals send the user class as the sender argument and include the user instance as an additional user argument. You can update your code as follows:

    @receiver(email_confirmed)
    def listener(sender, user, email, **kwargs):
        pass
    
    @receiver(unconfirmed_email_created)
    def listener(sender, user, email, **kwargs):
        pass
    
    @receiver(primary_email_changed)
    def listener(sender, user, old_email, new_email, **kwargs):
        pass

Python/Django supported versions

  • Python: 2.7, 3.4, 3.5 and 3.6
  • Django: 1.8 to 2.0

Running the Tests

  1. Install tox and coverage

    pip install tox coverage
  2. From the repository root, run

    tox
    tox -e coverage

    It's that simple.

Found a Bug?

To file a bug or submit a patch, please head over to django-simple-email-confirmation on github.

Credits

Originally adapted from Pinax's django-email-confirmation, which was originally adapted from James Tauber's django-email-confirmation.

More Repositories

1

polygon-clipping

Apply boolean polygon clipping operations (union, intersection, difference, xor) to your Polygons & MultiPolygons.
JavaScript
541
star
2

django-timezone-field

A Django app providing DB, form, and REST framework fields for zoneinfo and pytz timezone objects.
Python
390
star
3

django-settings-context-processor

Makes specified django settings visible in template rendering context.
Python
19
star
4

geojson-clipping

Apply boolean polygon clipping operations (union, intersection, difference, xor) to Polygons & MultiPolygons in your GeoJSON files.
JavaScript
18
star
5

django-matrix-field

A Django app providing database store for matrices.
Python
13
star
6

django-signup-login

Django unified signup and login views.
Python
4
star
7

Skeletor

Fusion 360 extension to 'skeletorize' your models
Python
4
star
8

django-npo-google-checkout

Implements google checkout's non-profit checkout and notificaiton API's.
Python
4
star
9

get-overpass

Get OpenStreetMap objects via the Overpass API as GeoJSON
JavaScript
3
star
10

assorted-unix-utils

An assortment of unix scripts/helpers I use.
Shell
3
star
11

geojson-cli-difference

Subtract Polygons & MultiPolygons in your GeoJSON files from each other.
JavaScript
2
star
12

auto-trac-on-dreamhost

Automates install of Trac on a Dreamhost hosting account.
Shell
2
star
13

linode-dns-manager-sorter

Intuitive sorting of the linode DNS manager tables.
JavaScript
2
star
14

geojson-cli-union

Union/dissolve Polygons & MultiPolygons in your GeoJSON files into each other.
JavaScript
1
star
15

mfogel.github.io

mike.fogel.ca homepage
HTML
1
star
16

django-html-image

Django image models and helpers for common use cases.
Python
1
star
17

natural-earth-admin-mvt

Natural Earth Admin features in Mapbox Vector Tile format
Makefile
1
star
18

btdt

Been There, Done That
JavaScript
1
star
19

dotfiles

Dotfiles I use
Vim Script
1
star
20

django-zipcode-zone-mapper

Django manage.py commands to generate kml files with colored zones derrived from Tiger zipcode/zcta data.
Python
1
star