- TurboGears 教程
- TurboGears - 主页
- TurboGears - 概述
- TurboGears - 环境
- TurboGears - 第一个程序
- TurboGears - 依赖关系
- TurboGears - 服务模板
- TurboGears - HTTP 方法
- Genshi模板语言
- TurboGears - 包括
- TurboGears - JSON 渲染
- TurboGears - URL 层次结构
- TurboGears - Toscawidgets 表格
- TurboGears - 验证
- TurboGears - 闪讯
- TurboGears - Cookie 和会话
- TurboGears - 缓存
- TurboGears - Sqlalchemy
- TurboGears - 创建模型
- TurboGears - 原油操作
- TurboGears - 数据网格
- TurboGears - 分页
- TurboGears - 管理员访问
- 授权与认证
- TurboGears - 使用 MongoDB
- TurboGears - 脚手架
- TurboGears - 挂钩
- TurboGears - 编写扩展
- TurboGears - 可插拔应用
- TurboGears - 安静的应用程序
- TurboGears - 部署
- TurboGears 有用资源
- TurboGears - 快速指南
- TurboGears - 有用的资源
- TurboGears - 讨论
TurboGears – ToscaWidgets 表格
任何 Web 应用程序最重要的方面之一就是为用户呈现用户界面。HTML 提供了一个 <form> 标签,用于设计界面。可以适当使用文本输入、单选、选择等表单元素。用户输入的数据通过 GET 或 POST 方法以 Http 请求消息的形式提交到服务器端脚本。
服务器端脚本必须从 http 请求数据重新创建表单元素。因此,在这种情况下,表单元素必须定义两次——一次在 HTML 中,另一次在服务器端脚本中。
使用 HTML 表单的另一个缺点是很难(如果不是不可能的话)动态呈现表单元素。HTML 本身不提供验证用户输入的方法。
托斯卡小部件2
TurboGears 依赖于 ToscaWidgets2,一个灵活的表单渲染和验证库。使用 ToscaWidgets,我们可以在 Python 脚本中定义表单字段并使用 HTML 模板呈现它们。还可以对 tw2 字段应用验证。
ToscaWidgets 库是许多模块的集合。下面列出了一些重要的模块 -
tw2.core - 它提供核心功能。此模块中的小部件并不可供最终用户使用。
tw2.forms - 这是一个基本的表单库。它包含字段、字段集和表单的小部件。
tw2.dynforms - 这包含动态表单功能。
tw2.sqla - 这是 SQLAlchemy 数据库的接口。
tw2.forms
它包含一个 Form 类,该类充当自定义表单的基础。有一个 TableForm 类在呈现两列表中的字段时非常有用。ListForm 在无序列表中显示其字段。
先生。 | 字段和描述 |
---|---|
1 | 文本域 单行文本输入字段 |
2 | 文本区 多行文本输入字段 |
3 | 复选框 呈现一个带有标签的可检查矩形框 |
4 | 复选框列表 多选组 pf 复选框 |
5 | 单选按钮 用于选择/取消选择的切换按钮 |
6 | 单选按钮列表 一组互斥的单选按钮 |
7 | 密码字段 与 Textfield 类似,但不显示输入键 |
8 | 日历日期选择器 让用户选择日期 |
9 | 提交按钮 提交表单的按钮 |
10 | 图像按钮 顶部有图像的可点击按钮 |
11 | 单选字段 允许从列表中选择单个项目 |
12 | 多重选择字段 允许从列表中选择多个项目 |
13 | 文件字段 上传文件的字段 |
14 | 电子邮件字段 电子邮件输入字段 |
15 | URL字段 用于输入 URL 的输入字段 |
16 | 数字字段 数字旋转盒 |
17 号 | 范围场 数字滑块 |
在以下示例中,构建了使用其中一些小部件的表单。虽然大多数这些小部件是在 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基类派生的类。所需的小部件放置在布局对象内。在这个例子中,使用了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 库中称为 SingleSelectfield。List 对象中与选项参数对应的项目形成下拉列表。可见标题设置为prompt_text 参数的值。
twf.SingleSelectField(prompt_text = 'text', options=['item1', 'item2', 'item3'])
默认情况下,表单显示一个“提交”按钮,其标题为“保存”。为了显示另一个标题,请创建一个 SubmitButton 对象并将其指定为 value 参数。
twf.SubmitButton(value = 'Submit')
表单被提交到一个 URL,该 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。因此在 RootController 中添加save_form()函数。
@expose() def save_movie(self, **kw): return str(kw)
确保服务器正在运行(使用变速箱服务)。在浏览器中输入 http://localhost:8080/twform 。
按提交按钮会将这些数据发布到save_form() URL,该 URL 将以字典对象的形式显示表单数据。
{ 'EmailID': u'lathkar@yahoo.com', 'NameOfStudent': u'Malhar Lathkar', 'Gender': u'Male', 'PINCODE': u'431602', 'DateOfBirth': u'2015-12-29', 'Subjects': [u'TurboGears', u'Flask', u'Django'], 'MediumOfInstruction': u'', 'AddressForCorrespondance': u'Shivaji Nagar\r\nNanded\r\nMaharashtra' }