From d2f0c7bb9c5878be8e21935a2fe40f6aeab690b5 Mon Sep 17 00:00:00 2001 From: Sergio Oliveira Date: Wed, 25 Nov 2015 12:12:58 -0200 Subject: [PATCH] New signal for user created --- colab/accounts/forms.py | 9 +++++++-- colab/accounts/models.py | 13 +++++++++++++ colab/accounts/signals.py | 5 +++-- colab/accounts/urls.py | 5 +++-- colab/accounts/views.py | 12 ------------ 5 files changed, 26 insertions(+), 18 deletions(-) diff --git a/colab/accounts/forms.py b/colab/accounts/forms.py index 2e37bf2..42595ca 100644 --- a/colab/accounts/forms.py +++ b/colab/accounts/forms.py @@ -9,7 +9,7 @@ from django.utils.functional import lazy from django.utils.translation import ugettext_lazy as _ from django.utils.safestring import mark_safe - +from .signals import user_created from .utils.validators import validate_social_account from .utils import mailman @@ -235,9 +235,14 @@ class UserCreationForm(UserForm): def save(self, commit=True): user = super(UserCreationForm, self).save(commit=False) - user.set_password(self.cleaned_data["password1"]) + password = self.cleaned_data["password1"] + user.set_password(password) + if commit: user.save() + + user_created.send(user.__class__, user=user, password=password) + return user diff --git a/colab/accounts/models.py b/colab/accounts/models.py index 1ec03d4..49322f3 100644 --- a/colab/accounts/models.py +++ b/colab/accounts/models.py @@ -8,11 +8,19 @@ from django.core.urlresolvers import reverse from django.utils.crypto import get_random_string from django.utils.translation import ugettext_lazy as _ +from .signals import user_created, user_password_changed from .utils import mailman class ColabUserManager(UserManager): + def _create_user(self, *args, **kwargs): + user = super(ColabUserManager, self)._create_user(*args, **kwargs) + password = kwargs.get('password') + + user_created.send(user.__class__, user=user, password=password) + return user + def create_user(self, username, email=None, password=None, **extra_fields): # It creates a valid password for users @@ -67,6 +75,11 @@ class User(AbstractUser): self.username = self.username.lower() super(User, self).save(*args, **kwargs) + def set_password(self, raw_password): + super(User, self).set_password(raw_password) + if self.pk: + user_password_changed.send(User, user=self, password=raw_password) + # We need to have `email` field set as unique but Django does not # support field overriding (at least not until 1.6). diff --git a/colab/accounts/signals.py b/colab/accounts/signals.py index 376c05d..c10d6b4 100644 --- a/colab/accounts/signals.py +++ b/colab/accounts/signals.py @@ -1,5 +1,6 @@ -from django.dispatch import Signal - +from django.dispatch import receiver, Signal +from django.db.models.signals import post_save +user_created = Signal(providing_args=['user', 'password']) user_password_changed = Signal(providing_args=['user', 'password']) diff --git a/colab/accounts/urls.py b/colab/accounts/urls.py index 211f396..3ffad03 100644 --- a/colab/accounts/urls.py +++ b/colab/accounts/urls.py @@ -3,7 +3,7 @@ from django.conf import settings from django.conf.urls import patterns, url from .views import (UserProfileDetailView, UserProfileUpdateView, - ManageUserSubscriptionsView, colab_password_change) + ManageUserSubscriptionsView) from colab.accounts import views from django.contrib.auth import views as auth_views @@ -29,7 +29,8 @@ urlpatterns = patterns('', {'template_name':'registration/password_reset_form_custom.html'}, name="password_reset"), - url(r'^change-password/?$', colab_password_change, + url(r'^change-password/?$', auth_views.password_change, + {'template_name':'registration/password_change_form_custom.html'}, name='password_change'), url(r'^change-password-done/?$', diff --git a/colab/accounts/views.py b/colab/accounts/views.py index b98ec83..5b206e8 100644 --- a/colab/accounts/views.py +++ b/colab/accounts/views.py @@ -2,7 +2,6 @@ from collections import OrderedDict from django.contrib import messages -from django.contrib.auth.views import password_change from django.db.models import Count from django.contrib.auth import get_user_model from django.utils.translation import ugettext as _ @@ -18,7 +17,6 @@ from colab.search.utils import get_collaboration_data, get_visible_threads from colab.accounts.models import User from .forms import (UserCreationForm, ListsForm, UserUpdateForm) -from .signals import user_password_changed from .utils import mailman @@ -214,13 +212,3 @@ def myaccount_redirect(request, route): url = '/'.join(('/account', request.user.username, route)) return redirect(url) - - -def colab_password_change(request): - template_name = 'registration/password_change_form_custom.html' - response = password_change(request, template_name) - if response.status_code == 302: - user_password_changed.send(sender=colab_password_change.__name__, - user=request.user, - password=request.POST.get('new_password1')) - return response -- libgit2 0.21.2