Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Web
  • » Flask и как правильно работать с SelectField [RSS Feed]

#1 Дек. 2, 2019 10:44:01

freeddos
Зарегистрирован: 2019-08-04
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Flask и как правильно работать с SelectField

Привет.
Работаю с Flask и WTForm. Имею форму с SelectField заполняю ее через запрос в базу потом формирование list и уже потом передаю на форму в render_template.

 users_from_db = users_db.query.all()
users_list = [(i.id, i.name) for i in users_from_db]
input_form.username.choices = users_list
SelectField заполняется корректно, выбор работает и когда делается submit уже перехватываю данные через request.form.
Но возник вопрос каким образом вернуть те же самые данные в форму с SelectField например если форма не прошла валидацию (чтобы не перезаполнять данные) или в других случаях когда нужно вернуть данные.
Как это сделать? У меня есть идея только такая:
1)получить данные через request.form.
2)получить значение которое вернулось от SelectField
3)сформировать как показал выше заполнение SelectField в форму.
4)из п.2 есть id пользователя, значит по нему могу найти из list значение
 default_for_select=[item for item in users_list if item[0] == id_user]
5) потом значение default_for_select запишу в input_form.username.default
 input_form.username.default = default_for_select[0]
т.к. input_form.username.default принимает значение не индекса и id, т.к. input_form.username.choices принимает list из tuple
Во всем этом есть большое подозрение на велосипед, но возможно как то по лучше сделать?
Спасибо тем кто откликнулся.

Отредактировано freeddos (Дек. 2, 2019 13:10:14)

Офлайн

#2 Дек. 4, 2019 02:36:24

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9844
Репутация: +  853  -
Профиль   Отправить e-mail  

Flask и как правильно работать с SelectField

freeddos
Но возник вопрос каким образом вернуть те же самые данные в форму с SelectField например если форма не прошла валидацию (чтобы не перезаполнять данные) или в других случаях когда нужно вернуть данные.
Форма заполняется в браузере? Значит, там надо наладить связь через JavaScript. Браузер должен как-то узнать, прошёл ли запрос, и, если не прошёл, заполнить поля формы отправленным ранее содержимым. Это содержимое ты можешь как сохранить в браузере на время выполнения запроса, так и передать его браузеру в качестве ответа “не получилось, ошибка, на тебе данные, которые ты давал”.



Отредактировано py.user.next (Дек. 4, 2019 02:37:23)

Офлайн

#3 Дек. 4, 2019 12:03:50

freeddos
Зарегистрирован: 2019-08-04
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Flask и как правильно работать с SelectField

Правильно ли я понимаю, что лучше использовать JS + JSON.
Flask выдает шаблон главной страницы. На этой странице отрабатывает JS который делает запрос на Flask (на какой нибудь route).
Этот route получает запрос и обрабатывает (например запрос для заполнения того же SelectField), Flask генерирует json из данных которые он взял в базе и отправляет обратно ответ этому JS.
JS получает ответ в виде json и формирует из него заполнение для формы (того же SelectField).

PS получается что jinja не очень удобно т.к. будет перегружаться страница полностью, формироваться объект формы и посылаться в шаблон.

Офлайн

#4 Дек. 4, 2019 13:23:43

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Flask и как правильно работать с SelectField

freeddos
PS получается что jinja не очень удобно т.к. будет перегружаться
У меня сложилось мнение что у вас перемешались мухи котлеты и бегемоты.

Форма может обрабатываться по меньшей мере 3 принципиально разными способами.

1 Обычная html форма. Сервер формирует в ответ на нажатие кнопки send новую страницу, например при помощи jinja
2. Используется так называемый “Ajax” XMLHttpRequest https://developer.mozilla.org/ru/docs/Web/API/XMLHttpRequest Сервер получает например json и отдает json Jinja не нужна
3. Используются Вебсокеты. Опять jinja не очень нужна, логика построения сервера совсем другая.

Нужна ли вам jinja только вы и можете решить в зависимости от того как строите систему.



Офлайн

#5 Дек. 5, 2019 00:22:57

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9844
Репутация: +  853  -
Профиль   Отправить e-mail  

Flask и как правильно работать с SelectField

freeddos
PS получается что jinja не очень удобно т.к. будет перегружаться страница полностью, формироваться объект формы и посылаться в шаблон.
При AJAX'е ничего не будет перезагружаться. Ты сможешь редактировать DOM текущей страницы на лету. Скрипт на JavaScript будет в фоне из браузера общаться с бэкендом на сервере через API, который ты сам придумаешь каким угодно. Там Jinja вообще не участвует. Только при первой загрузке страницы Jinja работает. Вся остальная работа по заполнению формы идёт между скриптом в браузере и бэкендом на сервере без участия шаблонов - на голом HTTP-протоколе.



Отредактировано py.user.next (Дек. 5, 2019 00:26:05)

Офлайн

  • Начало
  • » Web
  • » Flask и как правильно работать с SelectField[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version