Уведомления

Группа в Telegram: @pythonsu

#1 Май 17, 2016 15:09:31

webester
Зарегистрирован: 2016-05-17
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

flask redirect wtf и передача параметров

Здравствуйте! Подскажите пожалуйста, что можно сделать или как обычно нужно делать в таких случаях. Есть страница, на которой пользователь вводит информацию. После того, как он нажал “отправить”, я проверяю ввод и в некоторых случаях, мне надо отправить его на страницу с капчой. После успешного ввода капчи, данные будут сохранены. Как сделано сейчас:
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)

Офлайн

#2 Май 17, 2016 16:01:35

sander
Зарегистрирован: 2015-02-19
Сообщения: 317
Репутация: +  53  -
Профиль   Отправить e-mail  

flask redirect wtf и передача параметров

webester
почему сразу капчу не показать?

Офлайн

#3 Май 17, 2016 17:56:46

webester
Зарегистрирован: 2016-05-17
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

flask redirect wtf и передача параметров

sander
Потому, что неизвестно, что введет пользователь. В целом если не спамит урлы, то скорее всего, все ок. Но может и урлы часть текста. Поэтому, капчу только если текст выглядит подозрительно.

Офлайн

#4 Май 17, 2016 18:08:08

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

flask redirect wtf и передача параметров

1. Ceсия.
2. flash (на самом деле работает поверх сессии).
3. Сохранить во временном буфере типа редис и передать на url id сохраненных данных.
4. Тупо перерендерить ту же форму но уже с капчей.

Да дафига еще вариантов….

Офлайн

#5 Май 18, 2016 08:22:08

webester
Зарегистрирован: 2016-05-17
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

flask redirect wtf и передача параметров

4kpt_IV
1. Вы имеете ввиду хранить в куках? Как то не очень удобно и не правильно, сначала тащить данные с клиента, проверять, записывать их обратно на клиента и потом снова получать их с клиента.
2. Все то же, что и (1)
3. Не хотелось в бд писать ничего, потому, что мне всего то надо перенести данные из одного обработчика в другой, не рационально как то дергать бд по этому поводу.
4. Я думал об этом. Не могу придумать, как отличать форму с капчой от формы без капчи, когда срабатывает обработчик, то есть у меня есть
form = MainPage()
и
form_captcha = Captcha()
Как узнать с какой формой был отрендерен шаблон?
>>Да дафига еще вариантов….
Хотелось бы редиректнуться и туда прокинуть свои данные но если никак я готов выслушать эти “дафига вариантов”, если вам не сложно конечно.

Офлайн

#6 Май 18, 2016 08:56:39

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

flask redirect wtf и передача параметров

webester
Хотелось бы редиректнуться и туда прокинуть свои данные но если никак я готов выслушать эти “дафига вариантов”, если вам не сложно конечно.

Как “прокинуть”? Вы понимаете вообще как работает HTTP протокол? Потому как Вы написали полную чушь

Не сложно, но лень. Если Вы не понимаете как работать с формой как с объектом тогда придется дергать в любом случае базу. Если таких ситуаций будет не много, тогда можно просто использовать Redis для временного хранения данных. Вам и так, вероятнее всего, придется redis использовать для кеширования, поэтом лишней зависимости в проекте не добавится.

По Вашему вопросу. Вы не до конца написали как это все выглядит. Вот ввел человек 2 поля. Поле Вам не понравилось. Вы хотите показать ему еще одну форму с этими же двумя полями и им введенными данными, но при этом добавить капчу, правильно?

Отредактировано 4kpt_IV (Май 18, 2016 08:58:27)

Офлайн

#7 Май 19, 2016 13:26:56

webester
Зарегистрирован: 2016-05-17
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

flask redirect wtf и передача параметров

4kpt_IV

Как “прокинуть”? Вы понимаете вообще как работает HTTP протокол? Потому как Вы написали полную чушь
Это раздел для новичков? Я не ошибся? Я не говорил что надо прокинуть данные через HTTP запрос, я говорил, что хотелось бы когда сработает обработчик иметь доступ к этим данным. Я новичок и не знаю, может быть бывают какие то варианты.

Не сложно, но лень.
Прошу прощения, что пришел на форум отвлекать вас от важных дел, своими глупыми вопросами.

Вы не до конца написали как это все выглядит. Вот ввел человек 2 поля. Поле Вам не понравилось. Вы хотите показать ему еще одну форму с этими же двумя полями и им введенными данными, но при этом добавить капчу, правильно?
Поля можно показывать, можно не показывать, единственное, что важно показать, это капчу. После ввода капчи эти данные можно сохранять в базу.

Офлайн

#8 Май 19, 2016 13:36:31

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

flask redirect wtf и передача параметров

webester
Я бы сделал так:
1. С помощью обработчика главной страницы генерится форма для ввода данных, сразу с полем для ввода капчи, которое скрыто
2. Данные от клиента отдаются аяксом, страница при этом не перезагружается.
3. Если форма заполнена правильно, клиент получает положительный JSON типа такого {result: “OK”} и перезагружает страницу с нужным новым адресом.
4. Если форма не валидна, то в сессию юзера записываем ключ invalid_login, формируем капчу, записываем её тоже в сессию и отправляем негативный JSON {“result”: “ERROR”, img: “img_src”}
5. Клиент получает json, показывает капчу и обновляет картинку.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version