пятница, 9 июля 2010 г.

Recaptcha и Django

Однажды мне понадобилось прикрутить каптчу к регистрации, к комментариям и еще в пару мест в одном из проектов. Из всех каптч мне по определению больше всего нравится сервис ReCaptcha. Не буду описывать плюсы и минусы, а просто поделюсь готовым решением.

1. Для начала качаем само приложение
2. Распаковываем (tar -xf django-recaptcha.tar.gz) в корне вашего проекта
3. В settings.py добавляем две константы:

RECAPTCHA_PUBLIC_KEY='бла-бла-бла'
RECAPTCHA_PRIVATE_KEY='бла-бла-бла'

4. Заменяем "бла-бла-бла" на то, что выдали в http://www.google.com/recaptcha
5. Далее, если мы хотим защитить от роботов форму регистрации, создаем в приложении для аккаунтов модуль forms.py и пишем туда примерно следующее:

from my_project.recaptcha.fields import ReCaptchaField
from django.contrib.auth.forms import UserCreationForm
...
class UserCreationFormExtended(UserCreationForm): 
    recaptcha = ReCaptchaField(label=u'Символы с картинки')

    def __init__(self, *args, **kwargs): 
        super(UserCreationFormExtended, self).__init__(*args, **kwargs) 
        self.fields['email'].required = True

    class Meta:
        model = User
...

6. Ну, и, собственно, в views.py, который рендерит регистрационную форму, пишем примерно так:

from forms import UserCreationFormExtended
...
form = UserCreationFormExtended()
return {'form': form}

Это все.

P.S. Приложение django-recaptcha, которое Вы скачали по ссылке выше, не имеет никакого отношения к любым другим. Это приложение было отчасти переписано, отчасти написано с нуля мной и имеет только русскоязычную версию. Если будет необходимо, сделаем multilanguage-вариант.

Комментариев нет:

Отправить комментарий