Форум сайта python.su
0
Здравствуйте! Подскажите пожалуйста, что можно сделать или как обычно нужно делать в таких случаях. Есть страница, на которой пользователь вводит информацию. После того, как он нажал “отправить”, я проверяю ввод и в некоторых случаях, мне надо отправить его на страницу с капчой. После успешного ввода капчи, данные будут сохранены. Как сделано сейчас:
1. С помощью обработчика главной страницы генерится форма для ввода данных
2. Пользователь нажимает отправить и срабатывает этот же обработчик там метод form.validate_on_submit() сообщает, что все хорошо и мы проверяем ввод. Если надо проверить, что это не бот, я создаю форму с капчой и рендерю шаблон, в котором пользователь вводит капчу и нажимает “отправить”.
3. Форма отправляет его на другой обработчик, но там метод form.validate_on_submit() возвращает почему то, ложь. И я не могу быть уверенным, что все хорошо.
form = MainPage() if form.validate_on_submit(): data_save = {} data_save["cont"] = form.content_form.data.strip() #Проверка на необходимость ввода капчи if cap_need form_captcha = Captcha() return flask.render_template( 'conf.html', title= u'Почти...', form = form_captcha, content_form= form.content_form.data.strip(), ) else: return flask.redirect(flask.url_for('main'))
Отредактировано webester (Май 17, 2016 15:13:06)
Офлайн
53
webester
почему сразу капчу не показать?
Офлайн
0
sander
Потому, что неизвестно, что введет пользователь. В целом если не спамит урлы, то скорее всего, все ок. Но может и урлы часть текста. Поэтому, капчу только если текст выглядит подозрительно.
Офлайн
49
1. Ceсия.
2. flash (на самом деле работает поверх сессии).
3. Сохранить во временном буфере типа редис и передать на url id сохраненных данных.
4. Тупо перерендерить ту же форму но уже с капчей.
Да дафига еще вариантов….
Офлайн
0
4kpt_IV
1. Вы имеете ввиду хранить в куках? Как то не очень удобно и не правильно, сначала тащить данные с клиента, проверять, записывать их обратно на клиента и потом снова получать их с клиента.
2. Все то же, что и (1)
3. Не хотелось в бд писать ничего, потому, что мне всего то надо перенести данные из одного обработчика в другой, не рационально как то дергать бд по этому поводу.
4. Я думал об этом. Не могу придумать, как отличать форму с капчой от формы без капчи, когда срабатывает обработчик, то есть у меня есть
form = MainPage()
и
form_captcha = Captcha()
Как узнать с какой формой был отрендерен шаблон?
>>Да дафига еще вариантов….
Хотелось бы редиректнуться и туда прокинуть свои данные
но если никак я готов выслушать эти “дафига вариантов”, если вам не сложно конечно.
Офлайн
49
webester
Хотелось бы редиректнуться и туда прокинуть свои данные но если никак я готов выслушать эти “дафига вариантов”, если вам не сложно конечно.

Отредактировано 4kpt_IV (Май 18, 2016 08:58:27)
Офлайн
0
4kpt_IV
Как “прокинуть”? Вы понимаете вообще как работает HTTP протокол? Потому как Вы написали полную чушьЭто раздел для новичков? Я не ошибся? Я не говорил что надо прокинуть данные через HTTP запрос, я говорил, что хотелось бы когда сработает обработчик иметь доступ к этим данным. Я новичок и не знаю, может быть бывают какие то варианты.
Не сложно, но лень.Прошу прощения, что пришел на форум отвлекать вас от важных дел, своими глупыми вопросами.
Вы не до конца написали как это все выглядит. Вот ввел человек 2 поля. Поле Вам не понравилось. Вы хотите показать ему еще одну форму с этими же двумя полями и им введенными данными, но при этом добавить капчу, правильно?Поля можно показывать, можно не показывать, единственное, что важно показать, это капчу. После ввода капчи эти данные можно сохранять в базу.
Офлайн
568
webester
Я бы сделал так:
1. С помощью обработчика главной страницы генерится форма для ввода данных, сразу с полем для ввода капчи, которое скрыто
2. Данные от клиента отдаются аяксом, страница при этом не перезагружается.
3. Если форма заполнена правильно, клиент получает положительный JSON типа такого {result: “OK”} и перезагружает страницу с нужным новым адресом.
4. Если форма не валидна, то в сессию юзера записываем ключ invalid_login, формируем капчу, записываем её тоже в сессию и отправляем негативный JSON {“result”: “ERROR”, img: “img_src”}
5. Клиент получает json, показывает капчу и обновляет картинку.
Офлайн