From 0f3b3e42a6c12eeb1b670b45d7f7cc42518c2d83 Mon Sep 17 00:00:00 2001 From: Amber Elliot Date: Wed, 9 Jan 2019 22:38:57 +1300 Subject: [PATCH] Upgrade django-registration to version 3.0. This involves changing how registration templates are referenced and how the activation email is sent on user's email address change. Signed-off-by: Amber Elliot --- docker/settings.py | 2 +- layerindex/auth_forms.py | 2 +- layerindex/auth_views.py | 2 +- layerindex/forms.py | 2 +- layerindex/views.py | 73 +++++++++++-------- requirements.txt | 2 +- settings.py | 2 +- templates/base.html | 6 +- .../activate.html | 2 +- .../activation_complete.html | 2 +- .../activation_email_body.txt} | 2 +- .../activation_email_subject.txt | 0 .../activation_failed.html | 13 ++++ .../registration_complete.html | 0 .../registration_form.html | 0 templates/registration/login.html | 4 +- .../registration/password_reset_complete.html | 2 +- .../registration/password_reset_email.txt | 2 +- urls.py | 9 ++- 19 files changed, 75 insertions(+), 52 deletions(-) rename templates/{registration => django_registration}/activate.html (77%) rename templates/{registration => django_registration}/activation_complete.html (62%) rename templates/{registration/activation_email.txt => django_registration/activation_email_body.txt} (83%) rename templates/{registration => django_registration}/activation_email_subject.txt (100%) create mode 100644 templates/django_registration/activation_failed.html rename templates/{registration => django_registration}/registration_complete.html (100%) rename templates/{registration => django_registration}/registration_form.html (100%) diff --git a/docker/settings.py b/docker/settings.py index f309b76..2a7f2d2 100644 --- a/docker/settings.py +++ b/docker/settings.py @@ -148,7 +148,7 @@ INSTALLED_APPS = ( # Uncomment the next line to enable admin documentation: # 'django.contrib.admindocs', 'layerindex', - 'registration', + 'django_registration', 'reversion', 'reversion_compare', 'captcha', diff --git a/layerindex/auth_forms.py b/layerindex/auth_forms.py index 73c1d2c..3bdbc34 100644 --- a/layerindex/auth_forms.py +++ b/layerindex/auth_forms.py @@ -6,7 +6,7 @@ from django import forms from captcha.fields import CaptchaField -from registration.forms import RegistrationForm +from django_registration.forms import RegistrationForm from django.contrib.auth.forms import PasswordResetForm from django.contrib.auth.models import User from django.contrib.auth.hashers import check_password diff --git a/layerindex/auth_views.py b/layerindex/auth_views.py index 4c79fb3..d757db3 100644 --- a/layerindex/auth_views.py +++ b/layerindex/auth_views.py @@ -10,7 +10,7 @@ from django.core.exceptions import PermissionDenied from django.shortcuts import render from django.contrib import messages from django.contrib.auth import logout -from registration.backends.model_activation.views import RegistrationView +from django_registration.backends.activation.views import RegistrationView from django.contrib.auth.views import PasswordResetView from layerindex.auth_forms import CaptchaRegistrationForm, CaptchaPasswordResetForm, DeleteAccountForm diff --git a/layerindex/forms.py b/layerindex/forms.py index ef25674..833474a 100644 --- a/layerindex/forms.py +++ b/layerindex/forms.py @@ -8,7 +8,7 @@ from collections import OrderedDict from layerindex.models import LayerItem, LayerBranch, LayerMaintainer, LayerNote, RecipeChangeset, RecipeChange, ClassicRecipe from django import forms from django.core.validators import URLValidator, RegexValidator, EmailValidator -from registration.validators import ReservedNameValidator, DEFAULT_RESERVED_NAMES, validate_confusables +from django_registration.validators import ReservedNameValidator, DEFAULT_RESERVED_NAMES, validate_confusables from django.forms.models import inlineformset_factory, modelformset_factory from captcha.fields import CaptchaField from django.contrib.auth.models import User diff --git a/layerindex/views.py b/layerindex/views.py index 99ebe87..8f42e52 100644 --- a/layerindex/views.py +++ b/layerindex/views.py @@ -4,45 +4,56 @@ # # Licensed under the MIT license, see COPYING.MIT for details -import sys import os -from pkg_resources import parse_version -from itertools import islice -from django.shortcuts import get_object_or_404, get_list_or_404, render -from django.http import HttpResponse, HttpResponseRedirect, HttpResponseForbidden, Http404 -from django.core.urlresolvers import reverse, reverse_lazy, resolve -from django.core.exceptions import PermissionDenied -from django.template import RequestContext -from layerindex.models import Branch, LayerItem, LayerMaintainer, LayerBranch, LayerDependency, LayerNote, Update, LayerUpdate, Recipe, Machine, Distro, BBClass, IncFile, BBAppend, RecipeChange, RecipeChangeset, ClassicRecipe, StaticBuildDep, DynamicBuildDep +import sys from datetime import datetime -from django.views.generic import TemplateView, DetailView, ListView -from django.views.generic.edit import CreateView, DeleteView, UpdateView -from django.views.generic.base import RedirectView +from itertools import islice +from pkg_resources import parse_version + +import reversion +from django import forms +from django.contrib import messages +from django.contrib.auth import logout +from django.contrib.auth.decorators import login_required +from django.contrib.auth.hashers import make_password +from django.contrib.auth.models import Permission, User from django.contrib.messages.views import SuccessMessageMixin -from layerindex.forms import EditLayerForm, LayerMaintainerFormSet, EditNoteForm, EditProfileForm, RecipeChangesetForm, AdvancedRecipeSearchForm, BulkChangeEditFormSet, ClassicRecipeForm, ClassicRecipeSearchForm, ComparisonRecipeSelectForm +from django.contrib.sites.models import Site +from django.core.exceptions import PermissionDenied +from django.core.urlresolvers import resolve, reverse, reverse_lazy from django.db import transaction -from django.contrib.auth.models import User, Permission -from django.db.models import Q, Count, Sum +from django.db.models import Count, Q from django.db.models.functions import Lower from django.db.models.query import QuerySet +from django.db.models.signals import pre_save +from django.dispatch import receiver +from django.http import Http404, HttpResponse, HttpResponseRedirect +from django.shortcuts import get_list_or_404, get_object_or_404, render from django.template.loader import get_template from django.utils.decorators import method_decorator -from django.contrib.auth.decorators import login_required -from django.contrib.auth import logout -from django.contrib import messages -from django import forms from django.utils.html import escape -from django.contrib.sites.models import Site +from django.views.generic import DetailView, ListView, TemplateView +from django.views.generic.base import RedirectView +from django.views.generic.edit import (CreateView, DeleteView, FormView, + UpdateView) +from django_registration.backends.activation.views import RegistrationView from reversion.models import Revision -from . import utils -from . import simplesearch -from . import tasks + import settings -from django.dispatch import receiver -import reversion -from django.db.models.signals import pre_save -from registration.models import RegistrationProfile +from layerindex.forms import (AdvancedRecipeSearchForm, BulkChangeEditFormSet, + ClassicRecipeForm, ClassicRecipeSearchForm, + ComparisonRecipeSelectForm, EditLayerForm, + EditNoteForm, EditProfileForm, + LayerMaintainerFormSet, RecipeChangesetForm) +from layerindex.models import (BBAppend, BBClass, Branch, ClassicRecipe, + Distro, DynamicBuildDep, IncFile, LayerBranch, + LayerDependency, LayerItem, LayerMaintainer, + LayerNote, LayerUpdate, Machine, Patch, Recipe, + RecipeChange, RecipeChangeset, Source, StaticBuildDep, + Update) + +from . import simplesearch, tasks, utils def edit_layernote_view(request, template_name, slug, pk=None): layeritem = get_object_or_404(LayerItem, name=slug) @@ -887,10 +898,9 @@ class EditProfileFormView(SuccessMessageMixin, UpdateView): # Deactivate user and put through registration again user.is_active = False user.save() - site = Site.objects.get_current() - RegistrationProfile.objects.filter(user=user).delete() - registration_profile = RegistrationProfile.objects.create_profile(user) - registration_profile.send_activation_email(site) + view = RegistrationView() + view.request = self.request + view.send_activation_email(user) return HttpResponseRedirect(reverse('reregister')) return HttpResponseRedirect(self.get_success_url()) @@ -1611,4 +1621,3 @@ class ComparisonRecipeSelectDetailView(DetailView): messages.error(request, 'Failed to save changes: %s' % form.errors) return self.get(request, *args, **kwargs) - diff --git a/requirements.txt b/requirements.txt index 2fe5d74..7fa8977 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,7 +10,7 @@ django-axes==4.4.2 django-cors-headers==2.4.0 django-ipware==2.1.0 django-ranged-response==0.2.0 -django-registration==2.5.2 +django-registration==3 django-reversion==2.0.13 django-reversion-compare==0.8.5 django-simple-captcha==0.5.9 diff --git a/settings.py b/settings.py index 80d28f7..8b0a37c 100644 --- a/settings.py +++ b/settings.py @@ -148,7 +148,7 @@ INSTALLED_APPS = ( # Uncomment the next line to enable admin documentation: # 'django.contrib.admindocs', 'layerindex', - 'registration', + 'django_registration', 'reversion', 'reversion_compare', 'captcha', diff --git a/templates/base.html b/templates/base.html index 4bd914a..ae1ad01 100644 --- a/templates/base.html +++ b/templates/base.html @@ -53,14 +53,14 @@ {% else %} {% endif %} {% endblock %} diff --git a/templates/registration/activate.html b/templates/django_registration/activate.html similarity index 77% rename from templates/registration/activate.html rename to templates/django_registration/activate.html index 6e24890..39c2bac 100644 --- a/templates/registration/activate.html +++ b/templates/django_registration/activate.html @@ -7,7 +7,7 @@

{% trans "Account successfully activated" %}

-

{% trans "Log in" %}

+

{% trans "Log in" %}

{% else %} diff --git a/templates/registration/activation_complete.html b/templates/django_registration/activation_complete.html similarity index 62% rename from templates/registration/activation_complete.html rename to templates/django_registration/activation_complete.html index fe56bb4..81f2263 100644 --- a/templates/registration/activation_complete.html +++ b/templates/django_registration/activation_complete.html @@ -5,6 +5,6 @@ {% trans "Your account has been successfully activated." %}
-{% trans "You can now " %} {% trans "log in" %}. +{% trans "You can now " %} {% trans "log in" %}. {% endblock %} diff --git a/templates/registration/activation_email.txt b/templates/django_registration/activation_email_body.txt similarity index 83% rename from templates/registration/activation_email.txt rename to templates/django_registration/activation_email_body.txt index 736ea8a..15dd99b 100644 --- a/templates/registration/activation_email.txt +++ b/templates/django_registration/activation_email_body.txt @@ -7,7 +7,7 @@ link is valid for {{ expiration_days }} days. {% endblocktrans %} -http://{{ site.domain }}{% url "registration_activate" activation_key %} +http://{{ site.domain }}{% url "django_registration_activate" activation_key %} {% blocktrans %} If you did not make this request, please ignore this message. diff --git a/templates/registration/activation_email_subject.txt b/templates/django_registration/activation_email_subject.txt similarity index 100% rename from templates/registration/activation_email_subject.txt rename to templates/django_registration/activation_email_subject.txt diff --git a/templates/django_registration/activation_failed.html b/templates/django_registration/activation_failed.html new file mode 100644 index 0000000..07b0cde --- /dev/null +++ b/templates/django_registration/activation_failed.html @@ -0,0 +1,13 @@ +{% extends "base.html" %} +{% load i18n %} + +{% block content %} + +{% blocktrans %} + +Activation has failed. +
+ +{% endblocktrans %} + +{% endblock %} diff --git a/templates/registration/registration_complete.html b/templates/django_registration/registration_complete.html similarity index 100% rename from templates/registration/registration_complete.html rename to templates/django_registration/registration_complete.html diff --git a/templates/registration/registration_form.html b/templates/django_registration/registration_form.html similarity index 100% rename from templates/registration/registration_form.html rename to templates/django_registration/registration_form.html diff --git a/templates/registration/login.html b/templates/registration/login.html index 8e153ae..d89644f 100644 --- a/templates/registration/login.html +++ b/templates/registration/login.html @@ -13,8 +13,8 @@ {% csrf_token %} -

{% trans "Forgot password" %}? {% trans "Reset it" %}!

-

{% trans "Don't have an account" %}? {% trans "Create one now" %}!

+

{% trans "Forgot password" %}? {% trans "Reset it" %}!

+

{% trans "Don't have an account" %}? {% trans "Create one now" %}!

{% endblock %} diff --git a/templates/registration/password_reset_complete.html b/templates/registration/password_reset_complete.html index d9f3879..193eb74 100644 --- a/templates/registration/password_reset_complete.html +++ b/templates/registration/password_reset_complete.html @@ -5,6 +5,6 @@

{% trans "Password reset successfully" %}

-

{% trans "Log in" %}

+

{% trans "Log in" %}

{% endblock %} diff --git a/templates/registration/password_reset_email.txt b/templates/registration/password_reset_email.txt index e31abee..5e396fd 100644 --- a/templates/registration/password_reset_email.txt +++ b/templates/registration/password_reset_email.txt @@ -4,7 +4,7 @@ If you did request to reset your password, please click on the following link to do so:{% endblocktrans %} {% block reset_link %} -{{ protocol }}://{{ domain }}{% url "auth_password_reset_confirm" uidb64=uid token=token %} +{{ protocol }}://{{ domain }}{% url "password_reset_confirm" uidb64=uid token=token %} {% endblock %} {% blocktrans %}If you did not make this request then please ignore this message.{% endblocktrans %} diff --git a/urls.py b/urls.py index dcf9a83..c137f1d 100644 --- a/urls.py +++ b/urls.py @@ -21,17 +21,18 @@ urlpatterns = [ url(r'^accounts/password/reset/$', CaptchaPasswordResetView.as_view( email_template_name='registration/password_reset_email.txt', - success_url=reverse_lazy('auth_password_reset_done')), - name='auth_password_reset'), + success_url=reverse_lazy('password_reset_done')), + name='password_reset'), url(r'^accounts/register/$', CaptchaRegistrationView.as_view(), - name='registration_register'), + name='django_registration_register'), url(r'^accounts/delete/$', delete_account_view, {'template_name': 'layerindex/deleteaccount.html'}, name='delete_account'), url(r'^accounts/reregister/$', TemplateView.as_view( template_name='registration/reregister.html'), name='reregister'), - url(r'^accounts/', include('registration.backends.default.urls')), + url(r'^accounts/', include('django_registration.backends.activation.urls')), + url(r'^accounts/', include('django.contrib.auth.urls')), url(r'^captcha/', include('captcha.urls')), ]