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

То есть я бы рад, был бы редиректнуть, пользователя на другой урл, сохранив то, что он ввел и там сгенерить нужный шаблон и все бы отработало как по маслу, но не знаю как это сделать, поэтому я здесь генерю шаблон, передаю в него параметром нужные данные и там их вставляю в скрытые поля.
Может есть какой то другой путь, попроще?
sander
webester
почему сразу капчу не показать?
webester
sander
Потому, что неизвестно, что введет пользователь. В целом если не спамит урлы, то скорее всего, все ок. Но может и урлы часть текста. Поэтому, капчу только если текст выглядит подозрительно.
4kpt_IV
1. Ceсия.
2. flash (на самом деле работает поверх сессии).
3. Сохранить во временном буфере типа редис и передать на url id сохраненных данных.
4. Тупо перерендерить ту же форму но уже с капчей.

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

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

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

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

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

Вы не до конца написали как это все выглядит. Вот ввел человек 2 поля. Поле Вам не понравилось. Вы хотите показать ему еще одну форму с этими же двумя полями и им введенными данными, но при этом добавить капчу, правильно?
Поля можно показывать, можно не показывать, единственное, что важно показать, это капчу. После ввода капчи эти данные можно сохранять в базу.
FishHook
webester
Я бы сделал так:
1. С помощью обработчика главной страницы генерится форма для ввода данных, сразу с полем для ввода капчи, которое скрыто
2. Данные от клиента отдаются аяксом, страница при этом не перезагружается.
3. Если форма заполнена правильно, клиент получает положительный JSON типа такого {result: “OK”} и перезагружает страницу с нужным новым адресом.
4. Если форма не валидна, то в сессию юзера записываем ключ invalid_login, формируем капчу, записываем её тоже в сессию и отправляем негативный JSON {“result”: “ERROR”, img: “img_src”}
5. Клиент получает json, показывает капчу и обновляет картинку.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB