- WTForms是一个使用Python编写的表单库,它使得表单的定义,验证和处理变得非常轻松。
- 在HTML中,表单通过<form>创建,输入字段使用<input>定义,标签字段使用<label>定义。
- <input>的type有text,password,submit等。
- WTForms支持在Python中使用类定义表单,然后通过类定义生成对应的HTML代码。
- Flask-WTF与WTForms的区别是什么?Flask-WTF集成了WTForms。
- Flask-WTF包含表单数据解析,CSRF保护,文件上传等功能。
Flask-WTF默认为每个表单启用CSRF保护。
安装: pip install flask-wtf
- 如何使用WTForms创建一个表单呢?
字段属性大小写敏感,不能以下划线或者validate开头
- 常用的WTForms字段有:
- 实例化字段常用的参数有:
- 常用的WTForms验证器有:
message参数用来传入自定义错误消息,如果没有设置则使用内置的英文错误消息。
- 如何使用Flask-WTF创建表单?
配置WTF_CSRF_ENABLED来设置是否开启CSRF保护,默认为True。
Flask_WTF会自动在实例化表单时添加一个包含CSRF令牌值的隐藏字段,字段名为csrf_token。
- 如何查看表单类对应的HTML代码?
- 如何给字段添加其他的属性?
- 使用render_kw属性
- 在调用字段的时候传入
class是Python的保留关键字,这里使用class_代替,渲染后会变成class。
- 如何在模板中渲染表单?
- 在视图函数里实例化表单类
- 在render_template()函数中将表单对象作为参数传入
- 在模板中通过表单类的属性获取相应的字段
- 在模板中加入form.csrf_token以包含自动生成的CSRF令牌,这样在提交表单后服务端自动校验时才能校验通过
- Flask-WTF为表单实例提供了一个form.hidden_tag()方法,可依次渲染表单中所有隐藏的字段。
- 在HTML中,当<form>中submit的字段被单击时,会创建一个HTTP请求,请求中包含各个字段的数据。
- HTML中控制表单提交行为的属性:
- WTForms是如何进行验证的?答:实例化表单类时,validate()方法会被调用,各个字段的验证器被逐个调用。
验证结果form.validate()为布尔值
错误信息会被存储到form.errors中
在模板中通过form.字段名.errors获取某个字段对应的错误信息
- post方法提交的表单通过request.form获取;get方法提交的表单通过request.args获取。
- Flask-WTF提供的
form.validate_on_submit()
方法 合并了 WTForms的request.method == 'POST' and form.validate()
的操作 - 如何获取表单中某个字段的数据?答: 形式类似于 form.username.data
- 应当在处理表单后返回一个重定向的GET请求,这样用户在刷新页面时,就不会再次发送提交表单的请求,而带来困惑。
- 表单处理流程是怎样的?
- 如何将内置的错误消息设置为中文?
- Flask-WTF版本>0.14.2 或使用WTForms
- 将WTF_118N_ENABLED设为False,使得Flask-WTF使用WTForms默认的错误消息翻译
- 定义基类,然后要创建的表单类继承这个基类,基类如下:
- 另一种方案:在实例化表单类时通过meta关键字传入locales的值
locales属性是一个根据优先级排列的地区字符串列表
WTForms中zh和zh_TW分别代表简体中文和繁体中文
- 如何使用宏渲染表单?
- 定义宏
- 执行宏
- 如何自定义一个验证器?
- 行内验证器,当前表单自己用
- 全局验证器,不传入数据
- 全局验证器,工厂函数,传入数据
- 文件的上传
- Flask-CKEditor与富文本编辑器
- 单个表单多个提交按钮的实现
- 单个页面多个表单的实现