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

Патчим Django

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

2 комментария:

  1. Вот и ты заопенсорсился :)

    ОтветитьУдалить
  2. Вот если заапрувят - то можно считать что да, а так...
    Только врядли они это сделают

    ОтветитьУдалить