Учебники

TurboGears — ToscaWidgets Forms

Одним из наиболее важных аспектов любого веб-приложения является представление пользовательского интерфейса для пользователя. HTML предоставляет тег <form>, который используется для разработки интерфейса. Элементы формы, такие как ввод текста, радио, выбор и т. Д. Могут быть использованы соответствующим образом. Данные, введенные пользователем, передаются в виде сообщения Http-запроса на серверный скрипт методом GET или POST.

Серверный скрипт должен воссоздавать элементы формы из данных http-запроса. Таким образом, в этом случае элементы формы должны быть определены дважды — один раз в HTML и снова в сценарии на стороне сервера.

Еще одним недостатком использования формы HTML является то, что трудно (если не невозможно) визуализировать элементы формы динамически. HTML сам по себе не позволяет проверять вводимые пользователем данные.

ToscaWidgets2

TurboGears использует ToscaWidgets2, гибкую библиотеку для рендеринга и проверки форм. Используя ToscaWidgets, мы можем определить поля формы в нашем скрипте Python и отобразить их, используя шаблон HTML. Также возможно применить проверку к полю tw2.

Библиотека ToscaWidgets представляет собой набор из множества модулей. Некоторые важные модули перечислены ниже —

  • tw2.core — обеспечивает базовую функциональность. Виджеты в этом модуле не предназначены для конечного пользователя.

  • tw2.forms — это базовая библиотека форм. Он содержит виджеты для полей, наборов полей и форм.

  • tw2.dynforms — содержит функциональность динамических форм.

  • tw2.sqla — это интерфейс для базы данных SQLAlchemy.

tw2.core — обеспечивает базовую функциональность. Виджеты в этом модуле не предназначены для конечного пользователя.

tw2.forms — это базовая библиотека форм. Он содержит виджеты для полей, наборов полей и форм.

tw2.dynforms — содержит функциональность динамических форм.

tw2.sqla — это интерфейс для базы данных SQLAlchemy.

tw2.forms

Он содержит класс Form, который служит основой для пользовательских форм. Существует класс TableForm, который полезен для визуализации полей в таблице с двумя столбцами. ListForm представляет свои поля в неупорядоченном списке.

Sr.No. Поля и описание
1

Текстовое поле

Однострочное поле ввода текста

2

TextArea

Многострочное поле ввода текста

3

CheckBox

Представлен прямоугольный флажок с надписью

4

CheckBoxList

Множественные флажки группы pf

5

Переключатель

Кнопка переключения для выбора / отмены выбора

6

RadioButtonList

Группа взаимоисключающих Радио кнопок

7

PasswordField

Аналогично текстовому полю, но клавиши ввода не отображаются

8

CalendarDatePicker

Позволяет пользователю выбрать дату

9

SubmitButton

Кнопка для отправки формы

10

ImageButton

Кликабельная кнопка с изображением сверху

11

SingleSelectField

Позволяет выбрать один элемент из списка

12

MultipleSelectField

Позволяет выбрать несколько элементов из списка

13

FileField

Поле для загрузки файла

14

EmailField

Поле ввода электронной почты

15

URLField

Поле ввода для ввода URL

16

NumberField

Спинбокс номер

17

RangeField

Ползунок номера

Текстовое поле

Однострочное поле ввода текста

TextArea

Многострочное поле ввода текста

CheckBox

Представлен прямоугольный флажок с надписью

CheckBoxList

Множественные флажки группы pf

Переключатель

Кнопка переключения для выбора / отмены выбора

RadioButtonList

Группа взаимоисключающих Радио кнопок

PasswordField

Аналогично текстовому полю, но клавиши ввода не отображаются

CalendarDatePicker

Позволяет пользователю выбрать дату

SubmitButton

Кнопка для отправки формы

ImageButton

Кликабельная кнопка с изображением сверху

SingleSelectField

Позволяет выбрать один элемент из списка

MultipleSelectField

Позволяет выбрать несколько элементов из списка

FileField

Поле для загрузки файла

EmailField

Поле ввода электронной почты

URLField

Поле ввода для ввода URL

NumberField

Спинбокс номер

RangeField

Ползунок номера

В следующем примере создается форма с использованием некоторых из этих виджетов. Хотя большинство этих виджетов определены в tw2.forms, CalendarDateField определен в модуле tw2.Dynforms. Следовательно, оба этих модуля вместе с tw2.core импортируются в начале —

import tw2.core as twc
import tw2.forms as twf
import tw2.dynforms as twd

Форма ToscaWidgets — это класс, производный от базового класса tw2.forms.form . Требуемые виджеты размещаются внутри объекта Layout. В этом примере используется TableLayout . Виджеты отображаются в виде таблицы с двумя столбцами. Первый столбец показывает заголовок, а второй столбец показывает поле ввода или выбора.

Объект TextField создается с использованием следующего конструктора —

twf.TextField(size, value = None)

Если не указано, объект TextField принимает размер по умолчанию и изначально пуст. При объявлении объекта TextArea можно указать количество строк и столбцов.

twf.TextArea("",rows = 5, cols = 30)

Объект NumberField — это TextField, который может принимать только цифры. Стрелки вверх и вниз генерируются на правой границе, чтобы увеличить или уменьшить число внутри нее. Начальное значение также может быть указано в качестве аргумента в конструкторе.

twf.NumberField(value)

Справа от поля CalendarDatePicker отображается кнопка календаря. При нажатии появляется селектор даты. Пользователь может вручную ввести дату в поле или выбрать из селектора даты.

twd.CalendarDatePicker()

Объект EmailField представляет TextField, но текст в нем должен быть в формате электронной почты.

EmailID = twf.EmailField()

Следующая форма также имеет RadioButtonList. Конструктор этого класса содержит объект List в качестве значения параметра options. Радиокнопка для каждого параметра будет отображаться. Выбор по умолчанию указывается параметром value.

twf.RadioButtonList(options = ["option1","option2"],value = option1)

CheckBoxList отображает флажки для каждой опции в списке.

twf.CheckBoxList(options = [option1, option2, option3])

В этой библиотеке ToscaWidgets раскрывающийся список называется полем SingleSelect. Элементы в объекте List, соответствующие параметру options, формируют выпадающий список. Видимый заголовок устанавливается как значение параметра prompt_text.

twf.SingleSelectField(prompt_text = 'text', options=['item1', 'item2', 'item3'])

По умолчанию в форме отображается кнопка «Отправить» с надписью «сохранить». Чтобы отобразить другой заголовок, создайте объект SubmitButton и укажите его в качестве параметра значения.

twf.SubmitButton(value = 'Submit')

Форма отправляется по URL-адресу, который указывается в качестве значения параметра действия формы. По умолчанию данные формы отправляются методом http POST.

action = 'URL'

В следующем коде форма с именем AdmissionForm разработана с использованием описанных выше виджетов. Добавьте этот код в root.py перед классом RootController.

class AdmissionForm(twf.Form):
   class child(twf.TableLayout):
      NameOfStudent = twf.TextField(size = 20)
      AddressForCorrespondance = twf.TextArea("", rows = 5, cols = 30)
      PINCODE = twf.NumberField(value = 431602)
      DateOfBirth = twd.CalendarDatePicker()
      EmailID = twf.EmailField()
      Gender = twf.RadioButtonList(options = ["Male","Female"],value = 'Male')
      Subjects = twf.CheckBoxList(options = ['TurboGears', 'Flask', 'Django', 'Pyramid'])

      MediumOfInstruction = twf.SingleSelectField(prompt_text = 'choose',
         options = ['English', 'Hindi', 'Marathi', 'Telugu'])
			
      action = '/save_form'
      submit = twf.SubmitButton(value ='Submit')

Теперь сохраните этот код ниже как twform.html в каталоге шаблонов —

<!DOCTYPE html>
<html xmlns = "http://www.w3.org/1999/xhtml"
   xmlns:py = "http://genshi.edgewall.org/"
   lang = "en">
   
   <head>
      <title>TurboGears Form Example</title>
   </head>
   
   <body>
      <div id = "tw form">
         ${form.display(value = dict(title = 'default title'))}
      </div>
   </body>
   
</html>

В классе RootController (в root.py) добавьте следующую функцию контроллера —

@expose('hello.templates.twform')
def twform(self, *args, **kw):
   return dict(page = 'twform', form = MovieForm)

В классе AdmissionForm мы указали / save_form как URL действия. Следовательно, добавьте функцию save_form () в RootController.

@expose()
def save_movie(self, **kw):
   return str(kw)

Убедитесь, что сервер работает (с помощью коробки передач). Введите http: // localhost: 8080 / twform в браузере.

формы

Нажатие кнопки « Отправить» отправит эти данные в URL save_form () , который отобразит данные формы в виде объекта словаря.