Семейство captcha реализаций
Решил разобраться какие есть решения captcha в Django. Немного погуглив можно выделить следующие:
1. django-yacaptcha
2. django-simple-captcha
3. reCAPTCHA
4. Captcha
5. supercaptcha
ReCaptcha
Каждая из них интересное и имеет свои плюсы и минусы, но больше всего мне понравилось reCaptcha. Ну выделить наверное можно следующие преимущества:
- Картинка и голосовая речь в данной реализации тяжело программно анализируется.
- Словосочетания выбираются из существующего текста, т.е. если какой то символ изменен практически до неузнаваемости, то прочитав все слово можно догадаться по смыслу что за символ от нас требуется.
- Генерируется картинка/голосовая речь на сайте-провайдере, там же и идет проверка на правильность ввода, что в свою очередь частично снимает груз за отслеживанием новшеств в использовании/генерации captcha.
Сразу захотелось ее попробовать, так сказать увидеть в действии и оценить на сколько легко ее внедрять. Для внедрения прошел по следующим этапам:
1. Регистрация сайта
Проверка кода reCaptcha осуществляется на сервере recaptcha.net и для использования необходимо зарегистрировать свой сайт. После регистрации получаем два ключа "Public Key", "Private Key".
Эти настройки и некоторый другие прописываем в settings.py:
# your project's settings.py RECAPTCHA_PUBLIC_KEY = 'my_public_key' RECAPTCHA_PRIVATE_KEY = 'my_private_key' RECAPTCHA_THEME = 'white' #optional # lang value is taken from LANGUAGE_CODE, example LANGUAGE_CODE = 'ru'
где my_public_key - "Public Key" полученный после регистрации,
my_private_key - "Private Key" соответственно.
2. Добавляем реализацию reCaptcha form в приложение.
Ну что бы не изобретать свой велосипед решил следовать описанию в блоге ">>> k0001", для дальнейшего внедрения нужно было немного подправить код. Измененную версию можно скачать тут.
В результате в файле recaptcha_forms.py у меня была реализация RecaptchaForm, с внедренным полем reCaptcha.
3. Реализовавыем свою форму с reCaptcha полем.
Наследуем свой класс от RecaptchaForm и реализуем вьюху как описано далее:
from django.shortcuts import render_to_response
import django.forms as forms
from recaptcha_forms import RecaptchaForm
# create our form inheriting from RecaptchaForm
class NewAnimalForm(RecaptchaForm):
name = forms.CharField(label='animal name')
legs = forms.IntegerField(label='number of legs')
# and the view would be... just a little different.
# when the form is created, we explicitly pass the remote_ip
# to the form constructor. And that's all the magic.
def new_animal(request):
remote_ip = request.META['REMOTE_ADDR']
if request.method == 'POST':
form = NewAnimal(remote_ip, request.POST)
if form.is_valid():
# if we get here, the captcha solution the user provided
# was ok, so do whatever you want to do with your data here.
# ...
else:
form = NewAnimalForm(remote_ip)
return render_to_response('animals/new_animal.html', {'form': form })
Подключаем страницу и пользуемся.
Не претендую на оригинальность и лавры, данная статья есть лишь вводной информацией, все же больше всего интересует интеграции django.contrib.comments с reCaptcha.
0 коммент.:
Отправить комментарий