+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2019-06(3)

2019-07(5)

2019-08(103)

2019-09(107)

2019-10(11)

2019-11(8)

2019-12(12)

2020-01(18)

Flask笔记:WTForms

发布于2019-12-07 22:52     阅读(416)     评论(0)     点赞(28)     收藏(3)


使用Flask-WTF处理表单

WTForms 是一个使用 Python 编写的表单库, 它使得表单的定义、验证(服务器端) 和处理变得非常轻松。Flask-WTF 集成了 WTForms,使用它可以在 Flask 中更方便地使用 WTForms。Flask-WTF 集成了表单数据解析、CSRF保护、文件上传等功能。

1. 安装

	pip install flask-wtf
  • 1

Flask-WTF使用程序密钥来对CSRF令牌进行签名,所以需要为程序设置密钥:

	app.secret key =’secret string’ 
  • 1

2. 创建表单类

from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, Length

class LoginForm(FlaskForm):
    username = StringField('Username', validators=[DataRequired()], render_kw={"placeholder":"hello"})
    password = PasswordField('Password', validators=[DataRequired(), Length(8,128)])
    submit = SubmitField('Login')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

每个表单类必须继承自FlaskForm, 其中StringField等为表单中具体的字段,每个字段常用参数如下:

参 数 说 明
label 字段标签<label>的值,也就是渲染后显示在输入字段前的文字
render_kw 一个字典,用来设置对应的 HTML <input> 标签的属性,比如传入{'placeholder' : 'Your Name'},渲染后的 HTML 代码会将 <input> 标签的 placeholder 属性设为 Your Name
validators 一个列表,包含一系列验证器,会在表单提交后被逐一调用验证表单数据
default 字符串或可调用对象,用来为表单字段设置默认值

3. 在模板中渲染表单

3.1 传入表单实例
from forms import LoginForm

@app.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    # form.validate()用来验证用户输入的数据是否符合之前validators中给出的要求
    # 也可用 form.validate_on_submit()代替下面的条件
    if request.method == 'POST' and form.validate():
        ... # 处理POST请求
    return render_template('login.html', form=form)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

除了 POST 方法,如果请求的方法是 PUT、 PATCH 和 DELETE 方法, form.validate_on_ submit()也会验证表单数据。在这里不用带心会相应PUT方法,因为在methods中规定了只响应GET和POST方法。

3.2 在模板中渲染表单
<form method="post"> 
    {{ form.csrf_token }} <!-- CSRF令牌隐藏字段 -->

     {{ form.username.label }} 
     {{ form.username(class="form-control") }}  <!--可传入关键字参数-->

     {% for message in form.username.errors %} <!--服务器端验证后的错误信息-->
     <small class="error">{{ message }} </small><br> 
     {% endfor %}

     {{ form.password.label }} 
     {{ form.password(class="form-control", placeholder="hello") }} 

    {{ form.submit(class="btn btn-primary") }} 
</form>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

附:常用WTForms字段

字段类 说明 对应的HTML表示
BooleanField 复选框,值会被处理为 True 或 False <input type="checkbox">
DateField 文本字段,值会被处理为 datetime.date 对象 <input type="text">
DateTimeField 文本字段,值会被处理为 datetime.datetime 对象 <input type="text">
FileField 文件上传字段 <input type="file">
FloatField 浮点数字段,值会被处理为浮点型 <input type="text">
IntegerField 整数字段,值会被处理为整型 <input type="text">
RadioField 一组单选按钮 <input type="radio">
SelectField 下拉列表 <select><option></option></select>
SelectMultipleField 多选下拉列表 <select multiple><option></option></select>
SubmitField 提交按钮 <input type="submit">
StringField 文本字段 <input type="text">
HiddenField 隐藏文本字段 <input type="hidden">
PasswordField 密码文本字段 <input type="password">
TextAreaField 多行文本字段 <textarea></textarea>

常用的 WTForms 验证器

验证器 说 明
DataRequired(message=None) 验证数据是否有效
Email(message=None) 验证 Email 地址
EqualTo(fieldname, message=None) 验证两个字段值是否相同
InputRequired(message=None) 验证是否有数据
Length(min=-1 , max=-l, message=None) 验证输入值长度是否在给定范围内
NumberRange(min=None, max=None, message=None) 验证输入数字是否在给定范围内
Optional(strip_whitespace=True) 允许输入值为空 , 并跳过其他验证
Regexp(regex, flags=O, message=None) 使用正则表达式验证输入值
URL(require_tld=True, message=None) 验证 URL
AnyOf(values, message=None, values_formatter=None) 确保输入值在可选值列表中
NoneOf(values, message=None, values_formatter=None) 确保输入值不在可选值列表中

在实例化验证类时, message参数用来传入自定义错误消息,如果没有设直则使用内置的英文错误消息

详见《Flask Web开发实战》



所属网站分类: 技术文章 > python文章

作者:jiem

链接: http://www.pythonheidong.com/blog/article/170253/

来源:python黑洞网 www.pythonheidong.com

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

28 0

赞一赞 or 踩一踩

收藏该文
已收藏

评论内容:(最多支持255个字符)

相似文章

  Python 3网络爬虫开发实战书籍

  Pyspider的基本使用 -- 入门

  Python栈溢出【新手必学】

  django 自定义模版过滤器

  Python 100 Days

  Python基础_ONLINE习题集_03 数据类型

  整理了一周的Python资料,包含各阶段所需网站、项目,收藏了慢慢来

  numpy :: 计算特征之间的余弦距离

  PyQt5点击菜单栏弹出新窗口,解决新窗口闪退的实现方法

  开通博客第一天 写一个hello world

优质资源排行榜

 python经典电子书大合集下载 下载次数 8133

 零基础java开发工程师视频教程全套,基础+进阶+项目实战(152G) 下载次数 7550

 零基础前端开发工程师视频教程全套,基础+进阶+项目实战(共120G) 下载次数 7442

 零基础大数据全套视频400G 下载次数 7006

 零基础php开发工程师视频教程全套,基础+进阶+项目实战(80G) 下载次数 6893

 零基础软件测试全套系统教程 下载次数 6505

 全套人工智能视频+pdf 下载次数 6441

 IOS全套视频教程 基础班+就业班 下载次数 4680

 编程小白的第一本python入门书(高清版)PDF下载 下载次数 3502

10  effective python编写高质量Python代码的59个有效方法 pdf下载 下载次数 3301

11  Python深度学习 pdf下载 下载次数 3127

12  笨办法学python pdf下载 下载次数 3070

13  Python Cookbook第三版中文PDF下载高清完整扫描原版 下载次数 3008

14  树莓派Python编程指南 pdf下载 下载次数 3006

15  python从入门到精通视频(全60集)python视频教程下载 下载次数 3004

16  python项目开发视频 下载次数 3001

17  使用python+pygame开发的小游戏《嗷大喵快跑》源码下载 下载次数 2998

18  黑马2017年java就业班全套视频教程 下载次数 2992

19  python实战项目 平铺图像板系统源码下载,适用于想要保存,标记和共享图像,视频和网页的用户 下载次数 2987

20  利用python实现程序内存监控脚本 下载次数 2987

21  老男孩python自动化视频 下载次数 2982

22  Python基础教程 pdf下载 下载次数 2980

23  老王python基础+进阶+项目视频教程 下载次数 2974

24  尚硅谷Go学科全套视频 下载次数 2972

25  某硅谷Python项目+AI课程+核心基础视频教程 下载次数 2968

26  Web前端实战精品课程 下载次数 2967

27  [小甲鱼]零基础入门学习Python 下载次数 2962

28  tron python小游戏 下载次数 2962

29  老男孩python全栈开发15期 下载次数 2958

30  Python算法教程_中文版 pdf下载 下载次数 2950

31  2017最新web前端开发完整视频教程附源码 下载次数 2948

32  最新全套完整JAVAWEB2018开发视频 下载次数 2926

33  Spring boot实战视频6套下载 下载次数 2910

34  python全套视频十五期(116G) 下载次数 2907

35  Python高性能编程 pdf下载 下载次数 2898

36  流畅的Python PDF下载高清完整扫描原版 下载次数 2896

37  Python项目实战 下载次数 2887

38  30个小时搞定Python网络爬虫 含源码 下载次数 2883

39  python全自动抢火车票教程-python视频教程下载 下载次数 2883

40  简明python教程 (A Byte of Python)pdf下载 下载次数 2882

41  利用Python进行数据分析 pdf下载 下载次数 2879

42  尚硅谷大数据之Hadoop视频 下载次数 2876

43  Python A~B~C~ python视频教程下载 下载次数 2865

44  数据结构与算法视频(小甲鱼讲解-全) 下载次数 2863

45  web小程序表白天数倒计时源码下载 下载次数 2862

46  python基础视频教程 下载次数 2862

47  go语言全套视频 下载次数 2855

48  清华学霸尹成Python爬虫视频-ok 下载次数 2846

49  黑马前端36期最全视频和代码 下载次数 2843

50  2018最新全套web前端视频教程+源码下载 下载次数 2841