From 8e8bb64f4f68c40f918607deffa33a4c72279915 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9D=D0=B0=D0=B7=D0=B0=D1=80=20=D0=9A=D0=BE=D1=82=D1=8E?= =?UTF-8?q?=D0=BA?= Date: Thu, 29 Jan 2015 11:52:04 +0200 Subject: [PATCH] Registration reply --- proj/urls.py | 1 + registration/backends/default/views.py | 32 ++++++++++++++++++++++++++ registration/forms.py | 12 ++++++---- 3 files changed, 41 insertions(+), 4 deletions(-) diff --git a/proj/urls.py b/proj/urls.py index 1e7f6df3..652363ff 100644 --- a/proj/urls.py +++ b/proj/urls.py @@ -102,6 +102,7 @@ urlpatterns += patterns('', # ajax urls urlpatterns += patterns('', + url(r'^registration/reply/$', 'registration.backends.default.views.RegisterReply'), url(r'^register/', 'registration.backends.default.views.RegisterAjaxView'), url(r'^register-complete/', 'registration.backends.default.views.complete_registration'), url(r'^callback/', 'core.simple_index_view.callback'), diff --git a/registration/backends/default/views.py b/registration/backends/default/views.py index 7a170bbd..ada20499 100644 --- a/registration/backends/default/views.py +++ b/registration/backends/default/views.py @@ -2,6 +2,7 @@ from django.conf import settings from django.contrib.sites.models import RequestSite from django.contrib.sites.models import Site +from django.utils.translation import ugettext as _ from registration import signals from registration.models import RegistrationProfile @@ -187,6 +188,35 @@ def RegisterAjaxView(request): # 404 # return HttpResponse('not ajax') +def RegisterReply(request): + if request.GET: + email = request.GET['email'] + try: + user = User.objects.get(username=email) + except User.DoesNotExist: + response = {'errors': {'email': _(u'Пользователя с таким email не существует')}} + return HttpResponse(json.dumps(response), content_type='application/json') + if user.is_active: + response = {'errors': {'email': _(u'Пользователя с таким email уже активирован')}} + return HttpResponse(json.dumps(response), content_type='application/json') + else: + try: + registration_profile = user.registrationprofile_set.all()[0] + except IndexError: + registration_profile = RegistrationProfile.create_profile(user) + if Site._meta.installed: + site = Site.objects.get_current() + else: + site = RequestSite(request) + registration_profile.send_activation_email(site) + response = {'success': True} + return HttpResponse(json.dumps(response), content_type='application/json') + + + else: + return HttpResponse('no data') + + from django.contrib.auth.forms import AuthenticationForm from registration.forms import LoginForm @@ -210,6 +240,8 @@ def LoginView(request): #return HttpResponseRedirect(request.META.get('HTTP_REFERER','/')) else: response={'success':False, 'errors': form.errors} + if getattr(form, 'inactive'): + response.update({'inactive': True}) return HttpResponse(json.dumps(response), content_type='application/json') diff --git a/registration/forms.py b/registration/forms.py index 59c3cd3b..1a957bc1 100644 --- a/registration/forms.py +++ b/registration/forms.py @@ -133,22 +133,26 @@ class LoginForm(AuthenticationForm): def clean(self): username = self.cleaned_data.get('username') password = self.cleaned_data.get('password') + data = self.cleaned_data if username and password: self.user_cache = authenticate(username=username, password=password) if self.user_cache is None: - data = self.cleaned_data + self._errors['password'] = ErrorList([self.error_messages['invalid_login'] % { 'username': self.username_field.verbose_name }]) del data['password'] - return data elif not self.user_cache.is_active: - raise forms.ValidationError(self.error_messages['inactive']) + self._errors['username'] = ErrorList(self.error_messages['inactive']) + self.inactive = True + + del data['username'] + self.check_for_test_cookie() - return self.cleaned_data + return data