位置: 编程技术 - 正文

在Python的Flask中使用WTForms表单框架的基础教程(python运行flask)

编辑:rootadmin

推荐整理分享在Python的Flask中使用WTForms表单框架的基础教程(python运行flask),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python中flask模块,flask pycharm,python-flask,python-flask,python3 flask,python-flask,python flask django,python flask django,内容如对您有帮助,希望把文章链接给更多的朋友!

下载和安装安装 WTForms 最简单的方式是使用 easy_install 和 pip:

你可以从 PyPI 手动 下载 WTForms 然后运行 python setup.py install .

如果你是那种喜欢这一切风险的人, 就运行来自 Git 的最新版本, 你能够获取最新变更集的 打包版本, 或者前往 项目主页 克隆代码仓库.

主要概念Forms 类是 WTForms 的核心容器. 表单(Forms)表示域(Fields)的集合, 域能通过表单的字典形式或者属性形式访问.Fields(域)做最繁重的工作. 每个域(field)代表一个数据类型, 并且域操作强制表单输入为那个数据类型. 例如, InputRequired 和 StringField 表示两种不同的数据类型. 域除了包含的数据(data)之外, 还包含大量有用的属性, 例如标签、描述、验证错误的列表.每个域(field)拥有一个Widget(部件)实例. Widget 的工作是渲染域(field)的HTML表示. 每个域可以指定Widget实例, 但每个域默认拥有一个合理的widget. 有些域是简单方便的, 比如 TextAreaField 就仅仅是默认部件(widget) 为 TextArea 的StringField.为了指定验证规则, 域包含验证器(Validators)列表.开始让我们直接进入正题并定义我们的第一个表单::

当你创建一个表单(form), 你定义域(field)的方法类似于很多ORM定义它们的列(columns):通过定义类变量, 即域的实例.

因为表单是常规的 Python 类, 你可以很容易地把它们扩展成为你期望的::

通过子类, AdminProfileForm 类获得了已经定义的 ProfileForm 类的所有域. 这允许你轻易地在不同表单之间共享域的共同子集, 例如上面的例子, 我们增加 admin-only 的域到 ProfileForm.

使用表单使用表单和实例化它一样简单. 想想下面这个django风格的视图函数, 它使用之前定义的 RegistrationForm 类::

首先, 我们实例化表单, 给它提供一些 request.POST 中可用的数据. 然后我们检查请求(request)是不是使用 POST 方式, 如果它是, 我们就验证表单, 并检查用户遵守这些规则. 如果成功了, 我们创建新的 User 模型, 并从已验证的表单分派数据给它, 最后保存它.

编辑现存对象

我们之前的注册例子展示了如何为新条目接收输入并验证, 只是如果我们想要编辑现有对象怎么办?很简单::

这里, 我们通过给表单同时提供 request.POST 和用户(user)对象来实例化表单. 通过这样做, 表单会从 user 对象得到在未在提交数据中出现的任何数据.

我们也使用表单的populate_obj方法来重新填充用户对象, 用已验证表单的内容. 这个方法提供便利, 用于当域(field)名称和你提供数据的对象的名称匹配时. 通常的, 你会想要手动分配值, 但对于这个简单例子, 它是最好的. 它也可以用于CURD和管理(admin)表单.

在控制台中探索

WTForms 表单是非常简单的容器对象, 也许找出表单中什么对你有用的最简单的方法就是在控制台中玩弄表单:

我们看到的是当你实例化一个表单的时候, 表单包含所有域的实例, 访问域可以通过字典形式或者属性形式. 这些域拥有它们自己的属性, 就和封闭的表单一样.

当我们验证表单, 它返回逻辑假, 意味着至少一个验证规则不满足. form.errors 会给你一个所有错误的概要.

这次, 我们实例化 UserForm 时给 username 传送一个新值, 验证表单是足够了.

表单如何获取数据除了使用前两个参数(formdata和obj)提供数据之外, 你可以传送关键词参数来填充表单. 请注意一些参数名是被保留的: formdata, obj, prefix.

formdata比obj优先级高, obj比关键词参数优先级高. 例如:

虽然你在实践中几乎从未一起使用所有3种方式, 举例说明WTForms是如何查找 username 域:

如果表单被提交(request.POST非空), 则处理表单输入. 实践中, 即使这个域没有 表单输入, 而如果存在任何种类的表单输入, 那么我们会处理表单输入.如果没有表单输入, 则按下面的顺序尝试:

检查 user 是否有一个名为 username 的属性. 检查是否提供一个名为 username 的关键词参数. 最后, 如果都失败了, 使用域的默认值, 如果有的话.在Python的Flask中使用WTForms表单框架的基础教程(python运行flask)

验证器

WTForms中的验证器(Validators)为域(field)提供一套验证器, 当包含域的表单进行验证时运行. 你提供验证器可通过域构造函数的第二个参数validators:

你可以为一个域提供任意数量的验证器. 通常, 你会想要提供一个定制的错误消息:

这通常更好地提供你自己的消息, 作为必要的默认消息是通用的. 这也是提供本地化错误消息的方法.

对于内置的验证器的列表, 查阅 Validators.

渲染域渲染域和强制它为字符串一样简单:

然而, 渲染域的真正力量来自于它的 __call__() 方法. 调用(calling)域, 你可以提供关键词参数, 它们会在输出中作为HTML属性注入.

现在, 让我们应用这个力量在 Jinja 模板中渲染表单. 首先, 我们的表单:

然后是模板文件:

相同的, 如果你使用 Django 模板, 当你想要传送关键词参数时, 你可以使用我们在Django扩展中提供的模板标签form_field:

这两个将会输出:

WTForms是模板引擎不可知的, 同时会和任何允许属性存取、字符串强制(string coercion)、函数调用的引擎共事. 在 Django 模板中, 当你不能传送参数时, 模板标签 form_field 提供便利.

显示错误消息现在我们的表单拥有一个模板, 让我们增加错误消息::

如果你喜欢在顶部显示大串的错误消息, 也很简单:

由于错误处理会变成相当冗长的事情, 在你的模板中使用 Jinja 宏(macros, 或者相同意义的) 来减少引用是更好的. (例子)

定制验证器这有两种方式定制的验证器. 通过定义一个定制的验证器并在域中使用它:

或者通过提供一个在表单内的特定域(in-form field-specific)的验证器:

编写WTForm扩展示例

根据上面的代码,将TagListField中的字符串转为models.py中定义的Tag对象即可:

主要就是在process_formdata这一步处理表单的数据,将字符串转换为需要的数据。最终就可以在forms.py中这样定义表单了:

代码是不是很简洁了?^_^。。。

当然了写一个完整的WTForms扩展还是很麻烦的。这里只是刚刚入门。可以看官方扩展QuerySelectField的源码。。。效果:

Windows上使用virtualenv搭建Python+Flask开发环境 关于virtualenv:VirtualEnv用于在一台机器上创建多个独立的Python虚拟运行环境,多个Python环境相互独立,互不影响,它能够:1.在没有权限的情况下安装新

在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程 Python基础环境搭建CENTOS6.X系列默认安装的Python2.6,目前开发中主要是使用Python2.7,这两个版本之间还是有不少差异的,程序在Python2.6下经常会出问题。

Python的Flask框架应用程序实现使用QQ账号登录的方法 Flask-OAuthlib是OAuthlib的Flask扩展实现,项目地址:

标签: python运行flask

本文链接地址:https://www.jiuchutong.com/biancheng/387595.html 转载请保留说明!

上一篇:详解Python的Flask框架中生成SECRET_KEY密钥的方法(python+flask)

下一篇:Windows上使用virtualenv搭建Python+Flask开发环境(Windows上使用PD虚拟机)

  • 建筑企业交税流程
  • 自然人独资企业有公司章程吗
  • 发票连续作废两次
  • 增值税普票税额怎么算出来的
  • 增值税专用发票抵扣期限
  • 公司公积金缴纳比例一般来说是多少?
  • 一般纳税人科技公司发票是几个点
  • 一般纳税人印花税是季报还是月报
  • 2020年建筑企业税收优惠政策
  • 发放代扣代缴个人所得税分录
  • 股权转让需要缴纳企业所得税吗
  • 跨年收取租金
  • 一次性伤残就业赔偿标准
  • 公司和别人合伙违法吗
  • 劳务费发票可以含材料费吗
  • 企业年会的增值税能抵扣吗?
  • 过期没有进行申报印花税会怎样
  • 年底增值税专用发票入帐不勾选抵扣帐务处理
  • 企业增值税不可以跨月交吗
  • 个税系统中允许捐赠比例是多少?
  • 应对税务稽查的六点注意事项
  • 广告费和业务宣传费15%还是30%
  • 会计报表上总资产怎么填
  • 盘亏固定资产会计处理
  • 工程决算条件
  • 城建税印花税教育附加税各是多少
  • 注销税务登记后多久注销工商登记
  • ios14 举报短信
  • win10任务栏向上的箭头不见了
  • mac符号在哪里
  • 怎么给员工购买保险
  • 报考中级会计师证的条件
  • 应交税费的销项税额怎么算
  • win10系统多任务功能的快捷键
  • phppregmatch
  • php 二叉树
  • 增值税专用发票和普通发票的区别
  • 浅析企业坏账产生的原因及对策
  • ps怎么把图片套入样机快捷键
  • 财政零余额账户是什么
  • 合同 成本
  • 当月认证的发票可以撤销吗
  • 织梦官方网站
  • mysql是自动提交的吗
  • 中药饮片增值税率是多少
  • 非应税项目是有哪些项目
  • 长期股权投资投资损益的确认
  • 公司股东退股如何对资产纳税
  • 库存商品转成本意味着什么
  • 以前年度损益调整结转到哪里
  • 预付账款的会计编码是多少?
  • 农产品收购发票可以不抵扣吗
  • 行政单位应缴财政税金
  • 上月多出来的薪资怎么算
  • 跨年发生退货
  • 国际货运公司支付境外运费
  • 企业用地手续办理流程
  • 不含税价换算成含税价怎么算
  • sqlserver 版本号
  • 查找共享打印机所在的电脑
  • windows2003怎么升级
  • 如何使用光盘做启动盘
  • u盘重装操作系统怎么办
  • win7电脑系统如何
  • win8使用教程和技能
  • win8可以装pr2018吗
  • win10按prtsc没反应
  • android开启adb
  • jquery教程
  • linux命令行命令
  • 网络自定义怎么打开
  • 创建ie浏览器
  • pycharm打开文件怎么运行
  • u盘备份系统操作步骤
  • Python 中urls.py:URL dispatcher(路由配置文件)详解
  • 数据结构分析时间复杂度
  • node react vue
  • 合作社的税率是多少
  • 机构改革哪个单位负责
  • 税收优惠与政府补助对于企业研发来说哪个优惠力度大
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设