Ajax валидация формы регистрации на лету

remotes/origin/tests
Slava Kyrachevsky 9 years ago
parent 244cd7e918
commit 415cc9a283
  1. 4
      .gitignore
  2. 2
      proj/settings.py
  3. 3
      proj/urls.py
  4. 38
      registration/backends/default/views.py
  5. 102
      templates/client/popups/register.html

4
.gitignore vendored

@ -10,9 +10,9 @@ media/
media
logs/
Thumbs.db
/proj/local.py
proj/local.py
.DS_Store
locale
locale/
collected_static
# gulp

@ -118,7 +118,7 @@ MEDIA_URL = '/media/'
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(SITE_ROOT, 'collected_static')
STATICFILES_DIRS = (
(os.path.join(SITE_ROOT, 'static')),
'static',
)
STATICFILES_FINDERS = (

@ -123,7 +123,8 @@ if settings.DEBUG:
# ajax urls
urlpatterns += solid_i18n_patterns('',
url(r'^registration/reply/$', 'registration.backends.default.views.RegisterReply'),
url(r'^register/', 'registration.backends.default.views.RegisterAjaxView'),
url(r'^register/', 'registration.backends.default.views.RegisterAjaxView', name='register'),
url(r'^register/validate/', 'registration.backends.default.views.registration_form_validate', name='registration_form_validate'),
url(r'^register-complete/', 'registration.backends.default.views.complete_registration'),
url(r'^callback/', 'core.simple_index_view.callback'),
url(r'^search-form/get-parent/$', 'settings.views.search_parent'),

@ -1,19 +1,26 @@
# -*- coding: utf-8 -*-
from django.conf import settings
from django.contrib.sites.models import RequestSite
from django.contrib.sites.models import Site
from django.contrib.sites.models import RequestSite, Site
from django.utils.translation import ugettext as _
from django.http import Http404
from django.http import Http404, HttpResponse, HttpResponseRedirect
from django.shortcuts import render
from django.contrib.auth import login, logout, authenticate
from django.views.decorators.debug import sensitive_post_parameters
from django.views.decorators.cache import never_cache
from registration import signals
from registration.models import RegistrationProfile
from registration.views import ActivationView as BaseActivationView
from registration.views import RegistrationView as BaseRegistrationView
from registration.forms import RegistrationFormUniqueEmail
from accounts.forms import RegistrationCompleteForm, SocialRegistrationCompleteForm
from accounts.models import User
from social.apps.django_app.default.models import UserSocialAuth
import json
class RegistrationView(BaseRegistrationView):
"""
A registration backend which follows a simple workflow:
@ -144,19 +151,20 @@ class ActivationView(BaseActivationView):
return ('registration_activation_complete', (), {})
def registration_form_validate(request):
"""
Ajax валидация формы регистрации на лету
"""
data = {'success': False}
if request.method == 'POST':
form = RegistrationFormUniqueEmail(request.POST)
if form.is_valid():
data['success'] = True
else:
data['errors'] = form.errors
return HttpResponse(json.dumps(data), content_type='application/json')
from django.http import HttpResponse, HttpResponseRedirect
from accounts.models import User
from registration.forms import RegistrationFormUniqueEmail
from django.contrib.auth import login, logout, authenticate
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):
@ -277,8 +285,6 @@ def complete_registration(request):
else:
return HttpResponse('not ajax')
from django.shortcuts import render
def acquire_email(request, template_name="registration/acquire_email.html"):
"""

@ -1,68 +1,68 @@
{% load static %}
{% load i18n %}
{% load static i18n %}
<div id="pw-reg" class="popup-window pw-reg">
<header class="clearfix">
<div class="pw-title">{% trans 'Регистрация' %}</div>
</header>
<div class="pw-body clearfix">
<form method="post" class="pw-form simple-validate-register reg-form" id="reg_form" action="/register/">{% csrf_token %}
<div class="pwf-line">
<div class="pwf-field">
<header class="clearfix">
<div class="pw-title">{% trans 'Регистрация' %}</div>
</header>
<div class="pw-body clearfix">
<form method="post" class="pw-form simple-validate-register reg-form" id="reg_form" action="{% url 'register' %}" data-validate-url="{% url 'registration_form_validate' %}">
{% csrf_token %}
<div class="pwf-line">
<div class="pwf-field">
<input id="id_first_name" maxlength="30" name="first_name" placeholder="{% trans 'Имя' %}" type="text">
</div>
<div class="pwf-msg">
<div class="msg-help">{% trans 'например, свое имя' %}</div>
</div>
</div>
<div class="pwf-line">
<div class="pwf-field">
<div class="pwf-msg">
<div class="msg-help">{% trans 'например, свое имя' %}</div>
</div>
</div>
<div class="pwf-line">
<div class="pwf-field">
<input id="id_last_name" maxlength="30" name="last_name" placeholder="{% trans 'Фамилия' %}" type="text">
</div>
<div class="pwf-msg">
<div class="msg-help">{% trans 'например, свою фамилию' %}</div>
</div>
</div>
<div class="pwf-line">
<div class="pwf-field">
<div class="pwf-msg">
<div class="msg-help">{% trans 'например, свою фамилию' %}</div>
</div>
</div>
<div class="pwf-line">
<div class="pwf-field">
<input id="id_email" name="email" placeholder="{% trans 'Адрес электронной почты' %}" type="text">
</div>
<div class="pwf-msg"><div class="msg-help">{% trans 'например, ivanova@mail.ru' %}</div></div>
</div>
<div class="pwf-line">
<div class="pwf-field">
<div class="pwf-msg"><div class="msg-help">{% trans 'например, ivanova@mail.ru' %}</div></div>
</div>
<div class="pwf-line">
<div class="pwf-field">
<input id="id_password1" name="password1" placeholder="{% trans 'Придумайте пароль' %}" type="password">
</div>
<div class="pwf-msg"><div class="msg-help">{% trans 'пароль должен иметь не меньше 6 символов' %}</div></div>
</div>
<div class="pwf-msg"><div class="msg-help">{% trans 'пароль должен иметь не меньше 6 символов' %}</div></div>
</div>
<div class="pwf-line">
<div class="pwf-field">
<div class="pwf-field">
<input id="id_password2" name="password2" placeholder="{% trans 'Повторите пароль' %}" type="password">
</div>
<div class="pwf-msg"><div class="msg-help">{% trans 'пароль должен иметь не меньше 6 символов' %}</div></div>
</div>
<div class="pwf-msg"><div class="msg-help">{% trans 'пароль должен иметь не меньше 6 символов' %}</div></div>
</div>
<a href="{% url 'termsofuse' %}" style="color:#a2a2a2;">{% trans "Пользовательское соглашение" %}</a>
<div class="pwf-buttons-line pwf-line" style="margin-top: 12px;">
<div class="pwf-field">
<button type="submit" class="icon-check">{% trans 'Зарегистрироваться' %}</button>
</div>
<div class="pwf-msg err-message-box pd-top-14 red"> {% trans "Ошибка" %}</div>
</div>
</form>
</div>
<footer class="clearfix">
<div class="soc-med-login">
<div class="sm-label">{% trans 'или войдите с помощью' %}</div>
<div class="sm-body">
<ul>
<li><a href="{% url 'social:begin' 'facebook' %}?next={{ request.path }}"><img src="{% static 'client/img/soc-medias/icon-fb.png' %}" alt="" /></a></li>
<li><a href="{% url 'social:begin' 'twitter' %}?next={{ request.path }}"><img src="{% static 'client/img/soc-medias/icon-twit.png' %}" alt="" /></a></li>
<li><a href="{% url 'social:begin' 'odnoklassniki-oauth2' %}?next={{ request.path }}"><img src="{% static 'client/img/soc-medias/icon-ok.png' %}" alt="" /></a></li>
<li><a href="{% url 'social:begin' 'mailru-oauth2' %}?next={{ request.path }}"><img src="{% static 'client/img/soc-medias/icon-mailr.png' %}" alt="" /></a></li>
<li><a href="{% url 'social:begin' 'vk-oauth2' %}?next={{ request.path }}"><img src="{% static 'client/img/soc-medias/icon-vk.png' %}" alt="" /></a></li>
</ul>
</div>
</div>
</footer>
</div>
<button type="submit" class="icon-check">{% trans 'Зарегистрироваться' %}</button>
</div>
<div class="pwf-msg err-message-box pd-top-14 red"> {% trans "Ошибка" %}</div>
</div>
</form>
</div>
<footer class="clearfix">
<div class="soc-med-login">
<div class="sm-label">{% trans 'или войдите с помощью' %}</div>
<div class="sm-body">
<ul>
<li><a href="{% url 'social:begin' 'facebook' %}?next={{ request.path }}"><img src="{% static 'client/img/soc-medias/icon-fb.png' %}" alt="" /></a></li>
<li><a href="{% url 'social:begin' 'twitter' %}?next={{ request.path }}"><img src="{% static 'client/img/soc-medias/icon-twit.png' %}" alt="" /></a></li>
<li><a href="{% url 'social:begin' 'odnoklassniki-oauth2' %}?next={{ request.path }}"><img src="{% static 'client/img/soc-medias/icon-ok.png' %}" alt="" /></a></li>
<li><a href="{% url 'social:begin' 'mailru-oauth2' %}?next={{ request.path }}"><img src="{% static 'client/img/soc-medias/icon-mailr.png' %}" alt="" /></a></li>
<li><a href="{% url 'social:begin' 'vk-oauth2' %}?next={{ request.path }}"><img src="{% static 'client/img/soc-medias/icon-vk.png' %}" alt="" /></a></li>
</ul>
</div>
</div>
</footer>
</div>

Loading…
Cancel
Save