Email confirmation app for django
Project description
Django email validator
Requirements
- Python >= 3.8
- Django 3.0.7
General concept
Installation
You can install by:
pip3 install django-email-verification
and import by:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
...
'django_email_verification', # you have to add this
]
Settings parameters
You have to add these parameters to the settings, you have to include all of them except the last one:
EMAIL_ACTIVE_FIELD = 'is_active'
EMAIL_SERVER = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_ADDRESS = 'mymail@gmail.com'
EMAIL_FROM_ADDRESS = 'noreply@aliasaddress.com'
EMAIL_PASSWORD = 'mYC00lP4ssw0rd' # os.environ['password_key'] suggested
EMAIL_MAIL_SUBJECT = 'Confirm your email'
EMAIL_MAIL_HTML = 'mail_body.html'
EMAIL_MAIL_PLAIN = 'mail_body.txt'
EMAIL_TOKEN_LIFE = 60*60
EMAIL_PAGE_TEMPLATE = 'confirm_template.html'
EMAIL_PAGE_DOMAIN = 'http://mydomain.com/'
In detail:
EMAIL_ACTIVE_FIELD
: the user model field which will be set toTrue
once the email is confirmedEMAIL_SERVER
: your mail provider's server (e.g.'smtp.gmail.com'
for gmail)EMAIL_PORT
: your mail provider's server port (e.g.587
for gmail)EMAIL_ADDRESS
: your email addressEMAIL_FROM_ADDRESS
: this can be the same as email_address or an alias address if required.EMAIL_PASSWORD
: your email address' passwordEMAIL_MAIL_
:SUBJECT
: the mail default subject (needed)HTML
: the mail body in form of html (not needed)PLAIN
: the mail body in form of .txt file (needed ifHTML
is not defined)
EMAIL_TOKEN_LIFE
: the lifespan of the token (in seconds)EMAIL_PAGE_TEMPLATE
: the template of the success/error viewEMAIL_PAGE_DOMAIN
: the domain of the confirmation link (usually your site's domain)
Templates examples
The EMAIL_MAIL_HTML
should look like this ({{ link }}
is passed during the rendering):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<style>
h1{ color: blue; }
</style>
</head>
<body>
<h1>You are almost there!</h1><br>
<h2>Please click <a href="{{ link }}">here</a> to confirm your account</h2>
<h2>The token expires on {{ expiry|time:"TIME_FORMAT" }}</h2>
</body>
</html>
The EMAIL_MAIL_PLAIN
should look like this ({{ link }}
is passed during the rendering):
You are almost there!
Please click the following link to confirm your account
{{ link }}
The token expires on {{ expiry|time:"TIME_FORMAT" }}
The EMAIL_PAGE_TEMPLATE
should look like this ({{ success }}
is boolean and passed during the rendering):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Confirmation</title>
<style>
body{ color: blue; }
</style>
</head>
<body>
{% if success %}
You have confirmed your account!
{% else %}
Error, invalid token!
{% endif %}
</body>
</html>
Email sending
After you have created the user you can send the confirm email
from django.shortcuts import render
from django.contrib.auth import get_user_model
from django_email_verification import sendConfirm
def myCreateView(request):
...
user = get_user_model().objects.create(username=username, password=password, email=email)
sendConfirm(user)
return render(...)
sendConfirm(user)
sets user's EMAIL_ACTIVE_FIELD
to False
and sends an email with the defined template (and the pseudo-random generated token) to the user.
If you are using class based views, then it is necessary to call the superclass before calling the sendconfirm method.
ie...
Class myCreateView(CreateView):
def form_valid(self, form):
user = form.save()
returnVal = super(RegisterView, self).form_valid(form)
sendConfirm(user)
return returnVal
Token verification
You have to include the urls in urls.py
from django.contrib import admin
from django.urls import path, include
from django_email_verification import urls as mail_urls
urlpatterns = [
path('admin/', admin.site.urls),
...
path('email/', include(mail_urls)),
]
When a request arrives to https.//mydomain.com/email/<base64 email>/<token>
the package verifies the token and:
- if it corresponds to a pending token it renders the
EMAIL_PAGE_TEMPLATE
passingsuccess=True
and deletes the token - if it doesn't correspond it renders the
EMAIL_PAGE_TEMPLATE
passingsuccess=False
Console backend for development
If you want to use the console email backend provided by django, then define:
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
in settings.py. This will override any other email settings you provide.
Custom salt for token generation
Pass the custom_salt keyword parameter to the sendconfirm function as follows:
sendConfirm(user, custom_salt=my_custom_key_salt)
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
Hashes for django-email-verification-0.0.9.post1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3326846f3344344609b17b03aa924c76b1904155c02432d3f80331ad6d03fda3 |
|
MD5 | 1442afac372a8615c44e9249879e227c |
|
BLAKE2b-256 | c4bf5ea43920b4a3ee168d5e775aa2cfe5abf51d8dc212b8b49d36b98386a67a |
Hashes for django_email_verification-0.0.9.post1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2e23bac00f35185a16a7e446f1706df5becddf8ba6df0b316e069f7eb2aca20c |
|
MD5 | 30aeddea2a1f89a8049a2daf85d6123b |
|
BLAKE2b-256 | 0c15840e44d8646c829d77b30850c2229bda9fbbbe9480ed82fdb5fb9be5be88 |