diff --git a/accounts/forms.py b/accounts/forms.py
index 36da7fc9..b3e20fdf 100644
--- a/accounts/forms.py
+++ b/accounts/forms.py
@@ -1,4 +1,5 @@
# -*- coding: utf-8 -*-
+import re
import json
import ast
from django import forms
@@ -200,6 +201,8 @@ class EmailAnnouncementForm(forms.Form):
announcement = forms.MultipleChoiceField(choices=data, widget=forms.CheckboxSelectMultiple())
+
+url_regex = re.compile('^\w*$')
class RegistrationCompleteForm(forms.ModelForm):
country = forms.ModelChoiceField(label=_(u'Страна'), queryset=Country.objects.all(),
widget=forms.Select(attrs={'class': 'select2'}))
@@ -239,8 +242,9 @@ class RegistrationCompleteForm(forms.ModelForm):
def clean_url(self):
url = self.cleaned_data['url']
- if not is_latin(url):
- raise forms.ValidationError(_(u'url должен состоять только из латинских букв'))
+ valid = url_regex.match(url)
+ if valid is None:
+ raise forms.ValidationError(_(u'url должен состоять только из латинских букв и цифр'))
try:
User.objects.get(url=url)
@@ -259,6 +263,7 @@ class SocialRegistrationCompleteForm(RegistrationCompleteForm):
def save(self, force_insert=False, force_update=False, commit=True):
email = self.cleaned_data['email']
+ print(email, 'blablabla')
if User.objects.filter(email=email).exists():
# pass to the view user, that had account before
user = User.objects.get(email=email)
diff --git a/accounts/views.py b/accounts/views.py
index c3b1249d..1c2dbaea 100644
--- a/accounts/views.py
+++ b/accounts/views.py
@@ -231,10 +231,10 @@ class UserView(MetadataMixin, TemplateView):
url = self.kwargs.get('url')
try:
- url = int(url)
- user = get_object_or_404(User, id=url)
- except ValueError:
+ user = User.objects.get(id=int(url))
+ except (ValueError, User.DoesNotExist, ):
user = get_object_or_404(User, url=url)
+
self.kwargs['user_full_name'] = user.get_full_name()
return user
@@ -496,4 +496,4 @@ def remove_from_calendar(request):
return HttpResponse(json.dumps({'success': True}), content_type='application/json')
else:
- return Http404
\ No newline at end of file
+ return Http404
diff --git a/fabfile.py b/fabfile.py
index 2c65cd11..06e7ee59 100644
--- a/fabfile.py
+++ b/fabfile.py
@@ -116,3 +116,11 @@ def stage3_release():
run('python manage.py migrate article 0003')
chown()
call_state('start')
+
+
+def c_fix():
+ with cd(REMOTE_HOME_DIR):
+ call_state('stop', only='apache2')
+ run('git pull')
+ run('python manage.py migrate expobanner')
+ call_state('start', only='apache2')
diff --git a/functions/pipeline.py b/functions/pipeline.py
index d7260b00..b3cb665b 100644
--- a/functions/pipeline.py
+++ b/functions/pipeline.py
@@ -1,8 +1,20 @@
+# -*- coding: utf-8 -*-
-from accounts.models import User
import random
import string
+from accounts.models import User
+from django.conf import settings
+from django.contrib.sites.models import RequestSite, Site
+from django.core import signing
+from django.core.mail import EmailMultiAlternatives
+from django.core.urlresolvers import reverse
+from django.shortcuts import redirect
+from registration import signals
+from registration.models import RegistrationProfile
+from social.pipeline.partial import partial
+
+
def random_pass():
digits = random.sample(('0', '1', '2', '3', '4', '5', '6', '7', '8', '9'), 4)
chars = random.sample(string.lowercase[:], 4)
@@ -19,9 +31,6 @@ def load_user(strategy, details, response, uid, *args, **kwargs):
return {'user': user, 'is_new': False}
-from django.contrib.sites.models import Site, RequestSite
-from registration.models import RegistrationProfile
-
def create_user(strategy, details, response, uid, user=None, *args, **kwargs):
if user:
@@ -39,33 +48,20 @@ def create_user(strategy, details, response, uid, user=None, *args, **kwargs):
return {'user': new_user, 'is_new': True}
-
-from django.shortcuts import redirect
-from social.pipeline.partial import partial
-from registration import signals
-
@partial
def require_email(strategy, details, user=None, is_new=False, *args, **kwargs):
if user and user.email:
return
elif is_new and not details.get('email'):
email = strategy.request_data().get('email')
- if email:
+ if email and not User.objects.filter(email=email).exists():
details['email'] = email
else:
strategy.request.session['new_email'] = True
+ strategy.request.session['new_email_invalid'] = True
return redirect('acquire_email')
-
-
-
-
-from django.core import signing
-from django.core.mail import EmailMultiAlternatives
-from django.conf import settings
-from django.core.urlresolvers import reverse
-
def SendVerificationEmail(strategy, backend, code):
"""
Send an email with an embedded verification code and the necessary details to restore the required session
@@ -94,4 +90,4 @@ Please click on this link to continue registration.
email = EmailMultiAlternatives(**kwargs)
email.attach_alternative(emailHTML, "text/html")
- email.send()
\ No newline at end of file
+ email.send()
diff --git a/registration/backends/default/views.py b/registration/backends/default/views.py
index bf4d2e1f..a18622ed 100644
--- a/registration/backends/default/views.py
+++ b/registration/backends/default/views.py
@@ -3,6 +3,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 django.http import Http404
from registration import signals
from registration.models import RegistrationProfile
@@ -50,7 +51,7 @@ class RegistrationView(BaseRegistrationView):
an instance of ``registration.models.RegistrationProfile``. See
that model and its custom manager for full documentation of its
fields and supported operations.
-
+
"""
def register(self, request, **cleaned_data):
"""
@@ -100,7 +101,7 @@ class RegistrationView(BaseRegistrationView):
* If ``REGISTRATION_OPEN`` is both specified and set to
``False``, registration is not permitted.
-
+
"""
return getattr(settings, 'REGISTRATION_OPEN', True)
@@ -109,7 +110,7 @@ class RegistrationView(BaseRegistrationView):
"""
Return the name of the URL to redirect to after successful
user registration.
-
+
"""
# return json.dumps({'bla': 'ok'})
return ('registration_complete', (), {})
@@ -126,7 +127,7 @@ class ActivationView(BaseActivationView):
``registration.signals.user_activated`` will be sent, with the
newly activated ``User`` as the keyword argument ``user`` and
the class of this backend as the sender.
-
+
"""
activated_user = RegistrationProfile.objects.activate_user(activation_key)
if activated_user:
@@ -250,8 +251,6 @@ def LoginView(request):
HttpResponseRedirect('/')
-
-
def complete_registration(request):
if request.is_ajax():
response = {'success': False}
@@ -285,9 +284,15 @@ def acquire_email(request, template_name="registration/acquire_email.html"):
"""
Request email for the create user flow for logins that don't specify their email address.
"""
- backend = request.session['partial_pipeline']['backend']
- return render(request, template_name, {"backend": backend})
+ if 'partial_pipeline' not in request.session:
+ raise Http404
+ ctx = {
+ "backend": request.session['partial_pipeline']['backend'],
+ "invalid": request.session.get('new_email_invalid', False),
+ }
+ request.session['new_email_invalid'] = False
+ return render(request, template_name, ctx)
def inactive_user_message(request):
- return render(request, 'registration/social_registration_complete.html')
\ No newline at end of file
+ return render(request, 'registration/social_registration_complete.html')
diff --git a/templates/registration/acquire_email.html b/templates/registration/acquire_email.html
index 7ed9c904..5dd6bdbe 100644
--- a/templates/registration/acquire_email.html
+++ b/templates/registration/acquire_email.html
@@ -16,6 +16,9 @@
{# #}
+ {% if invalid %}
+ {% trans "Такой Email уже существует." %}
+ {% endif %}