Flask与表单的故事

  1. WTForms是一个使用Python编写的表单库,它使得表单的定义,验证和处理变得非常轻松。
  2. 在HTML中,表单通过<form>创建,输入字段使用<input>定义,标签字段使用<label>定义。
  3. <input>的type有text,password,submit等。
  4. WTForms支持在Python中使用类定义表单,然后通过类定义生成对应的HTML代码。
  5. Flask-WTF与WTForms的区别是什么?Flask-WTF集成了WTForms。
  6. Flask-WTF包含表单数据解析,CSRF保护,文件上传等功能。

Flask-WTF默认为每个表单启用CSRF保护。
安装: pip install flask-wtf

  1. 如何使用WTForms创建一个表单呢?
    在这里插入图片描述

字段属性大小写敏感,不能以下划线或者validate开头

  1. 常用的WTForms字段有:
    在这里插入图片描述
  2. 实例化字段常用的参数有:
    在这里插入图片描述
  3. 常用的WTForms验证器有:
    在这里插入图片描述
    在这里插入图片描述

message参数用来传入自定义错误消息,如果没有设置则使用内置的英文错误消息。

  1. 如何使用Flask-WTF创建表单?
    在这里插入图片描述

配置WTF_CSRF_ENABLED来设置是否开启CSRF保护,默认为True。
Flask_WTF会自动在实例化表单时添加一个包含CSRF令牌值的隐藏字段,字段名为csrf_token。

  1. 如何查看表单类对应的HTML代码?
    在这里插入图片描述
    在这里插入图片描述
  2. 如何给字段添加其他的属性?
  • 使用render_kw属性
    在这里插入图片描述
  • 在调用字段的时候传入
    在这里插入图片描述

class是Python的保留关键字,这里使用class_代替,渲染后会变成class。

  1. 如何在模板中渲染表单?
  • 在视图函数里实例化表单类
  • 在render_template()函数中将表单对象作为参数传入
  • 在模板中通过表单类的属性获取相应的字段
  • 在模板中加入form.csrf_token以包含自动生成的CSRF令牌,这样在提交表单后服务端自动校验时才能校验通过
  1. Flask-WTF为表单实例提供了一个form.hidden_tag()方法,可依次渲染表单中所有隐藏的字段。
  2. 在HTML中,当<form>中submit的字段被单击时,会创建一个HTTP请求,请求中包含各个字段的数据。
  3. HTML中控制表单提交行为的属性:
    在这里插入图片描述
  4. WTForms是如何进行验证的?答:实例化表单类时,validate()方法会被调用,各个字段的验证器被逐个调用。

验证结果form.validate()为布尔值
错误信息会被存储到form.errors中
在模板中通过form.字段名.errors获取某个字段对应的错误信息
在这里插入图片描述

  1. post方法提交的表单通过request.form获取;get方法提交的表单通过request.args获取。
  2. Flask-WTF提供的form.validate_on_submit()方法 合并了 WTForms的 request.method == 'POST' and form.validate()的操作
  3. 如何获取表单中某个字段的数据?答: 形式类似于 form.username.data
  4. 应当在处理表单后返回一个重定向的GET请求,这样用户在刷新页面时,就不会再次发送提交表单的请求,而带来困惑。
  5. 表单处理流程是怎样的?
    在这里插入图片描述
  6. 如何将内置的错误消息设置为中文?
  • Flask-WTF版本>0.14.2 或使用WTForms
  • 将WTF_118N_ENABLED设为False,使得Flask-WTF使用WTForms默认的错误消息翻译
  • 定义基类,然后要创建的表单类继承这个基类,基类如下:
    在这里插入图片描述

  • 另一种方案:在实例化表单类时通过meta关键字传入locales的值
    在这里插入图片描述

locales属性是一个根据优先级排列的地区字符串列表
WTForms中zh和zh_TW分别代表简体中文和繁体中文

  1. 如何使用宏渲染表单?
  • 定义宏
    在这里插入图片描述
  • 执行宏
    在这里插入图片描述
  1. 如何自定义一个验证器?
  • 行内验证器,当前表单自己用
    在这里插入图片描述
  • 全局验证器,不传入数据
    在这里插入图片描述
    在这里插入图片描述
  • 全局验证器,工厂函数,传入数据
    在这里插入图片描述
  1. 文件的上传
  2. Flask-CKEditor与富文本编辑器
  3. 单个表单多个提交按钮的实现
  4. 单个页面多个表单的实现
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值