captcha to login and callback form

remotes/origin/yandex
Bachurin Sergey 12 years ago
parent c4b8dfc2e9
commit 1a9c219592
  1. 30
      project/callback/forms.py
  2. 7
      project/myauth/forms.py
  3. 17
      project/myauth/views.py
  4. 2
      project/settings.py
  5. BIN
      project/static/img/refresh.png
  6. 13
      project/static/js/commons.js
  7. 4
      project/static/js/dialogs.js
  8. 2
      project/templates/callback/callback_btn.html
  9. 2
      project/templates/callback/callback_form.html
  10. 18
      project/templates/docs/invoice/as_pdf.html
  11. 2
      project/templates/myauth/login_form.html
  12. 1
      project/urls.py

@ -1,11 +1,15 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from django import forms from django import forms
from captcha.fields import CaptchaField
from . import models from . import models
class ReqAvailForm(forms.ModelForm): class ReqAvailForm(forms.ModelForm):
"""Форма заказа товара.""" """Форма заказа товара."""
captcha = CaptchaField(label=u'Введите код с картинки')
class Meta: class Meta:
model = models.ReqAvail model = models.ReqAvail
fields = ('name', 'phone', 'message') fields = ('name', 'phone', 'message')
@ -18,14 +22,22 @@ class ReqAvailForm(forms.ModelForm):
self.fields['name'].widget.attrs['width'] = u'Ваше имя, отчество' self.fields['name'].widget.attrs['width'] = u'Ваше имя, отчество'
def clean(self): def clean(self):
super(ReqAvailForm, self).clean() cleaned_data = super(ReqAvailForm, self).clean()
name = self.cleaned_data.get('name', '').strip() if (cleaned_data.get('name') and cleaned_data.get('message') and cleaned_data.get('phone')) and not(cleaned_data.get('captcha')):
phone = self.cleaned_data.get('phone', '').strip() raise forms.ValidationError(u"Проверьте правильность кода проверки")
elif not (cleaned_data.get('name') and cleaned_data.get('message') and cleaned_data.get('phone') and cleaned_data.get('captcha')):
if not name: if self.errors.get('phone') and self.data.get('phone'):
raise forms.ValidationError(u'Укажите Ваше имя.') raise forms.ValidationError(u"Проверьте правильность ввода контактов")
else:
if not phone: raise forms.ValidationError(u"Заполните все поля")
raise forms.ValidationError(u'Укажите Ваш телефон.') return cleaned_data
#name = self.cleaned_data.get('name', '').strip()
#phone = self.cleaned_data.get('phone', '').strip()
#if not name:
# raise forms.ValidationError(u'Укажите Ваше имя.')
#if not phone:
# raise forms.ValidationError(u'Укажите Ваш телефон.')
return self.cleaned_data return self.cleaned_data

@ -2,10 +2,12 @@
from django import forms from django import forms
from django.conf import settings from django.conf import settings
from django.contrib.auth import authenticate from django.contrib.auth import authenticate
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from captcha.fields import CaptchaField
from project.commons.forms import set_field_error from project.commons.forms import set_field_error
from project.customer import consts as customer_consts from project.customer import consts as customer_consts
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from models import DokUser from models import DokUser
@ -182,6 +184,9 @@ class LoginForm(forms.Form):
return self.user_cache return self.user_cache
class CaptchedLoginForm(LoginForm):
captcha = CaptchaField(label=u'Введите код с картинки')
class CustomUserCreationForm(UserCreationForm): class CustomUserCreationForm(UserCreationForm):
""" """

@ -209,11 +209,16 @@ def change_email(request):
@csrf_protect @csrf_protect
def login(request): def login(request):
"""Вход в систему.""" """Вход в систему."""
form_class = forms.LoginForm if request.session.get('login_count', None):
request.session['login_count'] += 1
else:
form_class = forms.LoginForm
request.session['login_count'] = 0
if request.session['login_count'] > 0:
form_class = forms.CaptchedLoginForm
form_prefix = 'login' form_prefix = 'login'
template_name = 'myauth/login.html' template_name = 'myauth/login.html'
success_url = 'customer_index' success_url = 'customer_index'
if request.method == 'POST': if request.method == 'POST':
form = form_class(data=request.POST, prefix=form_prefix) form = form_class(data=request.POST, prefix=form_prefix)
if form.is_valid(): if form.is_valid():
@ -221,14 +226,12 @@ def login(request):
old_session_key = request.user.profile.user_session_key old_session_key = request.user.profile.user_session_key
request.user.profile.user_session_key = request.session.session_key request.user.profile.user_session_key = request.session.session_key
request.user.profile.save() request.user.profile.save()
#try: del request.session['login_count']
# session = session.objects.get(session_key=old_session_key)
# session.delete()
#except:
# pass
if request.user.profile.check_name_not_filled(): if request.user.profile.check_name_not_filled():
success_url = 'customer_profile_edit' success_url = 'customer_profile_edit'
return redirect(success_url) return redirect(success_url)
else:
request.session['login_count'] += 1
else: else:
form = form_class(prefix=form_prefix) form = form_class(prefix=form_prefix)

@ -272,6 +272,8 @@ CELERYBEAT_SCHEDULE = {
}, },
} }
CAPTCHA_OUTPUT_FORMAT = u"%(hidden_field)s%(text_field)s<a href='#' class='captcha_refresh'><img src='" + STATIC_URL + "img/refresh.png' /></a> %(image)s"
try: try:
from project.local_settings import * from project.local_settings import *
except ImportError: except ImportError:

Binary file not shown.

After

Width:  |  Height:  |  Size: 357 B

@ -1,5 +1,18 @@
$(document).ready(function() { $(document).ready(function() {
$('.has-datepicker').datepicker({dateFormat: 'dd.mm.yy'}); $('.has-datepicker').datepicker({dateFormat: 'dd.mm.yy'});
$('.captcha_refresh').click(function(e) {
e.preventDefault();
var $form = $(this).parents('form');
var url = location.protocol + "//" + window.location.hostname + ":"
+ location.port + "/captcha/refresh/";
$.getJSON(url, {}, function(json) {
$form.find('input[name="captcha_1"]').val('');
$form.find('input[name="captcha_0"]').val(json.key);
$form.find('img.captcha').attr('src', json.image_url);
});
});
}); });
function fetch_data(url, async) { function fetch_data(url, async) {

@ -61,6 +61,10 @@ $(document).ready(function() {
else { else {
// process form errors // process form errors
if (data.form_errors) { if (data.form_errors) {
var captcha = $(form).find('img.captcha');
if (captcha) {
$(form).find('a.captcha_refresh').click();
}
var errors = $('.errors-layout', form); var errors = $('.errors-layout', form);
var html = '<ul>'; var html = '<ul>';
for (var err in data.form_errors) { for (var err in data.form_errors) {

@ -1 +1 @@
<a href="#" onclick="return show_req_avail_form('{% url 'catalog-req-avail-no-id' %}');">Заказать обратный звонок</a> <a href="#" onclick="return show_req_avail_form('{% url 'catalog-req-avail-no-id' %}');">Задать вопрос</a>

@ -1,4 +1,4 @@
<form id="req-avail-form" action="" method="post" title="Заказ обратного звонка"> <form id="req-avail-form" action="" method="post" title="Задать вопрос">
{% csrf_token %} {% csrf_token %}
<div class='grey-box'> <div class='grey-box'>
<div style="margin: 0px 0px 20px 0px;">Оставьте свои контакты и мы перезвоним вам, ответим на все ваши вопросы</div> <div style="margin: 0px 0px 20px 0px;">Оставьте свои контакты и мы перезвоним вам, ответим на все ваши вопросы</div>

@ -166,7 +166,7 @@
{{ profile.get_boss_title }} {{ profile.get_boss_title }}
</td> </td>
<td class="bottom_border"> <td class="bottom_border">
{% if obj.add_sign_and_stamp and profile.boss_sign %} {# TODO передавать флаг из вьюхи #} {% if profile.boss_sign %} {# TODO передавать флаг из вьюхи #}
<img src="{{ profile.boss_sign.path }}" /> {# подпись руководителя #} <img src="{{ profile.boss_sign.path }}" /> {# подпись руководителя #}
{% endif %} {% endif %}
</td> </td>
@ -182,7 +182,7 @@
<tr> <tr>
<td colspan="2">Главный бухгалтер</td> <td colspan="2">Главный бухгалтер</td>
<td class="bottom_border"> <td class="bottom_border">
{% if obj.add_sign_and_stamp and profile.glavbuh_sign %} {# TODO передавать флаг из вьюхи #} {% if profile.glavbuh_sign %} {# TODO передавать флаг из вьюхи #}
<img src="{{ profile.glavbuh_sign.path }}" /> {# подпись главбуха #} <img src="{{ profile.glavbuh_sign.path }}" /> {# подпись главбуха #}
{% else %} {% else %}
<br />&nbsp; <br />&nbsp;
@ -197,15 +197,13 @@
<tr> <tr>
<td colspan="2">Главный бухгалтер</td> <td colspan="2">Главный бухгалтер</td>
<td class="bottom_border"> <td class="bottom_border">
{% if obj.add_sign_and_stamp %} {# TODO передавать флаг из вьюхи #} {% if profile.glavbuh_sign %}
{% if profile.glavbuh_sign %} <img src="{{ profile.glavbuh_sign.path }}" /> {# подпись главбуха #}
<img src="{{ profile.glavbuh_sign.path }}" /> {# подпись главбуха #} {% else %}
{% if profile.boss_sign %}
<img src="{{ profile.boss_sign.path }}" /> {# или подпись руководителя #}
{% else %} {% else %}
{% if profile.boss_sign %} <br />&nbsp;
<img src="{{ profile.boss_sign.path }}" /> {# или подпись руководителя #}
{% else %}
<br />&nbsp;
{% endif %}
{% endif %} {% endif %}
{% endif %} {% endif %}
</td> </td>

@ -10,7 +10,7 @@
{{ hidden }} {{ hidden }}
{% endfor %} {% endfor %}
{% for field in form %} {% for field in form.visible_fields %}
<div id="{{ field.name }}" class="field"> <div id="{{ field.name }}" class="field">
{% if field.label %} {% if field.label %}
{{ field.label_tag }} {{ field.label_tag }}

@ -28,6 +28,7 @@ urlpatterns = patterns('',
url(r'^my/callback/', include('project.callback.urls')), url(r'^my/callback/', include('project.callback.urls')),
url(r'^user/', include('project.myauth.urls')), url(r'^user/', include('project.myauth.urls')),
url(r'^captcha/', include('captcha.urls')),
url(r'^', include('cms.urls')), url(r'^', include('cms.urls')),
) )

Loading…
Cancel
Save