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 media
logs/ logs/
Thumbs.db Thumbs.db
/proj/local.py proj/local.py
.DS_Store .DS_Store
locale locale/
collected_static collected_static
# gulp # gulp

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

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

@ -1,19 +1,26 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from django.conf import settings from django.conf import settings
from django.contrib.sites.models import RequestSite from django.contrib.sites.models import RequestSite, Site
from django.contrib.sites.models import Site
from django.utils.translation import ugettext as _ 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 import signals
from registration.models import RegistrationProfile from registration.models import RegistrationProfile
from registration.views import ActivationView as BaseActivationView from registration.views import ActivationView as BaseActivationView
from registration.views import RegistrationView as BaseRegistrationView from registration.views import RegistrationView as BaseRegistrationView
from registration.forms import RegistrationFormUniqueEmail
from accounts.forms import RegistrationCompleteForm, SocialRegistrationCompleteForm from accounts.forms import RegistrationCompleteForm, SocialRegistrationCompleteForm
from accounts.models import User
from social.apps.django_app.default.models import UserSocialAuth from social.apps.django_app.default.models import UserSocialAuth
import json import json
class RegistrationView(BaseRegistrationView): class RegistrationView(BaseRegistrationView):
""" """
A registration backend which follows a simple workflow: A registration backend which follows a simple workflow:
@ -144,19 +151,20 @@ class ActivationView(BaseActivationView):
return ('registration_activation_complete', (), {}) 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') @sensitive_post_parameters('password1', 'password2')
@never_cache @never_cache
def RegisterAjaxView(request): def RegisterAjaxView(request):
@ -277,8 +285,6 @@ def complete_registration(request):
else: else:
return HttpResponse('not ajax') return HttpResponse('not ajax')
from django.shortcuts import render
def acquire_email(request, template_name="registration/acquire_email.html"): def acquire_email(request, template_name="registration/acquire_email.html"):
""" """

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

Loading…
Cancel
Save