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