diff --git a/proj/settings.py b/proj/settings.py index 6b6b2371..d134b177 100644 --- a/proj/settings.py +++ b/proj/settings.py @@ -185,8 +185,8 @@ AUTH_USER_MODEL = 'accounts.User' #AUTH_PROFILE_MODULE = 'accounts.UserProfile' #for admin. for project will be another -LOGIN_URL = '/admin/accounts/login_admin' -LOGIN_REDIRECT_URL = '/admin' +#LOGIN_URL = '/admin/accounts/login_admin' +#LOGIN_REDIRECT_URL = '/admin' #registration info ACCOUNT_ACTIVATION_DAYS=2 @@ -249,6 +249,7 @@ INSTALLED_APPS = ( 'hvad', 'ckeditor', 'bitfield', + 'social_auth', #'south', #'debug_toolbar', ) diff --git a/proj/urls.py b/proj/urls.py index 81a8b8f1..300c7391 100644 --- a/proj/urls.py +++ b/proj/urls.py @@ -5,13 +5,21 @@ from django.conf.urls import patterns, include, url from django.contrib import admin admin.autodiscover() +from django.contrib.auth.views import login, logout + urlpatterns = patterns('', - #uncomment to enable django admin - #url(r'^admin/', include(admin.site.urls)), url(r'^$', 'proj.views.home', name='home'), + url(r'^login/', login), + url(r'^logout/', logout), + url(r'^/', 'proj.views.home', include('registration.backends.default.urls')), url(r'^admin/', include('proj.admin_urls')), url(r'^accounts/', include('registration.backends.default.urls')), ) + +# ajax urls +urlpatterns += patterns('', + url(r'^register/', 'registration.backends.default.views.RegisterAjaxView'), + ) ''' urlpatterns = patterns('', url(r'^$', 'proj.views.home', name='home'), diff --git a/proj/views.py b/proj/views.py index 9585a206..9c1989ad 100644 --- a/proj/views.py +++ b/proj/views.py @@ -6,6 +6,8 @@ from django.contrib.contenttypes.models import ContentType #from forms import SettingsForm #from models import Settings from django.contrib.auth.decorators import login_required +from django.template import RequestContext + from file.models import TmpFile, FileModel @@ -14,15 +16,16 @@ from city.models import City from theme.models import Tag from django.db.models.loading import get_model -from registration.forms import RegistrationFormUniqueEmail +from registration.forms import RegistrationFormUniqueEmail, LoginForm def home(request): reg_form = RegistrationFormUniqueEmail() - args = {'reg_form': reg_form} + login_form = LoginForm() + args = {'reg_form': reg_form, 'login_form': login_form} args.update(csrf(request)) - return render_to_response('base_client.html', args) + return render_to_response('base_client.html', args, context_instance=RequestContext(request)) def test(request): return render_to_response('test.html') diff --git a/registration/backends/default/views.py b/registration/backends/default/views.py index 402e3463..746c89bc 100644 --- a/registration/backends/default/views.py +++ b/registration/backends/default/views.py @@ -8,6 +8,8 @@ from registration.views import ActivationView as BaseActivationView from registration.views import RegistrationView as BaseRegistrationView +import json + class RegistrationView(BaseRegistrationView): """ A registration backend which follows a simple workflow: @@ -81,6 +83,7 @@ class RegistrationView(BaseRegistrationView): signals.user_registered.send(sender=self.__class__, user=new_user, request=request) + return new_user def registration_allowed(self, request): @@ -98,15 +101,18 @@ class RegistrationView(BaseRegistrationView): """ return getattr(settings, 'REGISTRATION_OPEN', True) + def get_success_url(self, request, user): """ Return the name of the URL to redirect to after successful user registration. """ +# return json.dumps({'bla': 'ok'}) return ('registration_complete', (), {}) + class ActivationView(BaseActivationView): def activate(self, request, activation_key): """ @@ -128,3 +134,68 @@ class ActivationView(BaseActivationView): def get_success_url(self, request, user): return ('registration_activation_complete', (), {}) + + + + + +from django.http import HttpResponse, HttpResponseRedirect + +from accounts.models import User + +from registration.forms import RegistrationFormUniqueEmail, LoginForm +from django.contrib.auth import login, logout + +from django.views.decorators.debug import sensitive_post_parameters +from django.views.decorators.cache import never_cache + +@sensitive_post_parameters('password1', 'password2') +@never_cache +def RegisterAjaxView(request): + if request.is_ajax(): + data = {'success': False} + if request.POST: + form = RegistrationFormUniqueEmail(request.POST) + if form.is_valid(): + first_name, last_name, email, password = form.cleaned_data['first_name'],\ + form.cleaned_data['last_name'], form.cleaned_data['email'],\ + form.cleaned_data['password1'] + if Site._meta.installed: + site = Site.objects.get_current() + else: + site = RequestSite(request) + new_user = RegistrationProfile.objects.create_inactive_user(first_name, last_name, email, + password, site) + signals.user_registered.send(sender=User, + user=new_user, + request=request) + data['success'] = True + + else: + data.update(form.errors) + + return HttpResponse(json.dumps(data), content_type='application/json') + else: + # 404 + return HttpResponse('not post') + else: + # 404 + return HttpResponse('not ajax') + +from django.contrib.auth.forms import AuthenticationForm + +@sensitive_post_parameters('password') +def LoginAjaxView(request): + + if request.POST: + form = AuthenticationForm(request.POST) + if form.is_valid(): + login(request, form.get_user()) + return HttpResponseRedirect('/') + + else: + return HttpResponse('bla') + else: + form = LoginForm() + + return HttpResponseRedirect('/') diff --git a/registration/forms.py b/registration/forms.py index 30e240e4..564df0d6 100644 --- a/registration/forms.py +++ b/registration/forms.py @@ -8,6 +8,8 @@ needs of custom user models, you will need to write your own forms if you're using a custom model. """ + + try: from django.contrib.auth import get_user_model User = get_user_model() @@ -17,6 +19,7 @@ except ImportError: #from django.contrib.auth.models import User from django import forms +from django.contrib.auth.forms import AuthenticationForm from django.utils.translation import ugettext_lazy as _ @@ -131,4 +134,8 @@ class RegistrationFormNoFreeEmail(RegistrationForm): email_domain = self.cleaned_data['email'].split('@')[1] if email_domain in self.bad_domains: raise forms.ValidationError(_("Registration using free email addresses is prohibited. Please supply a different email address.")) - return self.cleaned_data['email'] \ No newline at end of file + return self.cleaned_data['email'] + +class LoginForm(AuthenticationForm): + username = forms.CharField(max_length=254, widget=forms.TextInput(attrs={'placeholder': _(u'Ваш адрес электронной почты')})) + password = forms.CharField(label=_("Password"), widget=forms.PasswordInput(attrs={'placeholder': _(u'Ваш Пароль')})) \ No newline at end of file diff --git a/registration/views.py b/registration/views.py index 07bc54dc..7bd3f15f 100644 --- a/registration/views.py +++ b/registration/views.py @@ -11,6 +11,8 @@ from registration import signals from registration.forms import RegistrationForm, RegistrationFormUniqueEmail +import json + class _RequestPassingFormView(FormView): """ A version of FormView which passes extra arguments to certain @@ -112,7 +114,7 @@ class RegistrationView(_RequestPassingFormView): class ActivationView(TemplateView): """ Base class for user activation views. - + """ http_method_names = ['get'] template_name = 'registration/activate.html' @@ -134,7 +136,7 @@ class ActivationView(TemplateView): def activate(self, request, *args, **kwargs): """ Implement account-activation logic here. - + """ raise NotImplementedError diff --git a/static/client/css/main.css b/static/client/css/main.css index 030ee961..fe422d6a 100644 --- a/static/client/css/main.css +++ b/static/client/css/main.css @@ -3444,6 +3444,10 @@ form.s-message { padding-left: 20px; display: none; } +.pwf-msg .msg-error { + color: #fe0238; + padding-left: 20px; +} .pwf-msg .msg-help:before { content: '—'; diff --git a/static/client/js/main.js b/static/client/js/main.js index 799409cb..2843b97c 100644 --- a/static/client/js/main.js +++ b/static/client/js/main.js @@ -18,7 +18,16 @@ function mapInit() { map: map }); } +/* */ +function addError(inputId, msg){ + var $input = $('#reg_form '+ inputId); + var $error = $("
").attr("class", "pwf-msg").append( + $("
").attr("class", "msg-error").append(msg) + ); + $input.parent().parent().append($error) + +} !function ($) { @@ -40,15 +49,61 @@ function mapInit() { }); } }); - + /* submiting registration form */ $(function () { - $('#reg_form').on('submit', function(){ + $('#reg_form').on('submit', function(event){ + event.preventDefault(); + var formData = $(this).serialize(); + + $.post('register/', formData, function(data){ + if(data.success){ + //register success + + // remove input values + $('#reg_form input').each(function(i){ + $(this).val(""); + }); + // close popup + $.fancybox.close(); + + } + else{ + //hide help messages + $("#reg_form .msg-help:visible").hide(); + //delete previous errors + $("#reg_form .msg-error").parent().remove(); + + //generate new errors + var form_inputs = ['first_name', 'last_name', 'email', 'password1', 'password2'] + for(var i= 0; i < form_inputs.length; i++){ + if(form_inputs[i] in data){ + var input_id = '#id_'+form_inputs[i]; + addError(input_id, data[form_inputs[i]]) + } + } + } + }); + }); + /* submiting login form + $('#log_form').on('submit', function(event){ + event.preventDefault(); var formData = $(this).serialize(); - $.post('accounts/register/', formData, function(){ - alert('success'); + var url = 'login/'; + $.ajax({ + url: url, + type: 'post', + data: formData, + success: function(data){ + if(data.success){ + console.log('success'); + } + else{ + console.log(data); + } + } }); - return false; - }) + }); + */ /* Нестандартное оформление для поля select */ $.fn.customSelect = function () { @@ -578,8 +633,10 @@ function mapInit() { var $input = $(this); var $fLine = $input.closest(".pwf-line"); var $help = $fLine.find('div.msg-help'); + var $error = $fLine.find('div.msg-error'); if ($help.is(':hidden')) { $help.fadeIn(300); + $error.parent().remove(); } }); diff --git a/templates/client/base_client.html b/templates/client/base_client.html index bca09477..1063e5aa 100644 --- a/templates/client/base_client.html +++ b/templates/client/base_client.html @@ -65,7 +65,7 @@
  • В контакте' %}
  • Twitter' %}
  • - {% if user %} + {% if user.is_authenticated %} {% else %} @@ -577,7 +577,6 @@
    {{ reg_form.first_name }} -
    {% trans 'например, свое имя' %}
    @@ -637,13 +636,13 @@
    {% trans 'Вход в личный кабинет' %}
    -
    + {% csrf_token %}
    -
    +
    {{ login_form.username }}
    -
    +
    {{ login_form.password }}