Показаны сообщения с ярлыком captcha. Показать все сообщения
Показаны сообщения с ярлыком captcha. Показать все сообщения

среда, 22 апреля 2009 г.

Патчим Django

Для задачи, которую на досуге пописываю, понадобилось мне изобразить wizard, причём на последней странице нужна капча против ботов.
Для капчи я решил использовать supercaptcha. В принципе это не единственное решение, скажем, я писал уже о Django Simple Captcha, но суперкапча мне как-то больше приглянулась.
Что касается wizard'а, то в django.contrib есть класс FormWizard, предназначенный как раз для этого.
И вроде всё хорошо, но обнаружился ньюанс - на самом последнем шаге FormWizard валидирует заново все данные, которые ввёл пользователь. Для обычных полей проблем никаких не возникает (разве что чуть больше времени тратится), а с капчей такой фокус не пройдёт, т.к. валидация у неё "одноразовая". Править капчу, на мой взгляд, в данном случае неправильно, поэтому пришлось внести изменения в FormWizard, о которых я написал ticket 10810 в Trac Django. По сути дела там реализован "хак", т.к. просто последняя форма не ревалидируется заново. Как решить задачу чтобы "и волки сыты, и овцы целы" я так пока и не придумал. Но текущее решение вполне работоспособное, поэтому пока остановлюсь на неём.

пятница, 27 марта 2009 г.

Простота - залог успеха

Всё-таки очень подкупает в Django его компонентность и слабосвязанность различных частей. К примеру в том примерчике, что сейчас пытаюсь сделать, понадобилась мне капча. Стандартной нет с фреймворком, но на сайте нашёл ссылку на Django Simple Captcha (кстати, на Google Code довольно много проектов для Django), решил попробовать:
  • сделал этому проекту svn co ;
  • добавил ссылку к python path;
  • добавил CaptchaField в мою модель;
  • добавил соответствующий url;
  • и всё заработало :)
В общей сложности на решение задачи ушло минут 10-20. С решением её на PHP для варианта, когда нет механизма "из коробки", даже сравнивать не охота :)
В общем - переиспользование рулит не по-детски ибо это сила!