Flask-WTF是什么?

是一个关于表单的扩展库,可以自动生成表单的HTML代码和验证提交的表单数据,并且提供跨站请求伪造(Cross-Site Request Forgery)保护的功能,使用非常方便

使用步骤:

  1.创建表单类,实例化对象

  2.在模板中使用该对象

  3.在试图函数中处理表单

定义表单类

  1. flask_wtf 进口 FlaskForm
  2. wtforms 导入 StringField
  3. wtforms.validators 导入 DataRequired
  4.  
  5. class MyForm FlaskForm ):
  6. name = StringField 'name' validators = [ DataRequired ()])

添加视图函数

  1. @app.route('/')
  2. def index():
  3. # 创建表单对象
  4. form = NameForm()
  5. # 渲染时分配到模板文件
  6. return render_template('form.html', form=form)

表单渲染

  1. {# 原生渲染 #}
  2. {# 判断是否有错误#}
  3. {% if form.name.errors %}
  4. {{ form.name.errors[0] }}
  5. {% endif %}
  6. <h1>Hello {{ name }}</h1>
  7. <form action="{{ url_for('wtform') }}" method="post" >
  8. # {{form.hidden_tag()}}里面放的也就是csrf_token
  9. {{ form.csrf_token }}
  10. {{ form.name.label() }}{{ form.name(id='xx',class='yyy') }}
  11. {{ form.submit() }}
  12. </form>

  13. {# bootstrap渲染 #}
  14. {% extends 'bootstrap/base.html' %}
  15. {% import 'bootstrap/wtf.html' as wtf %}
  16. {% block content %}
  17. <div class="container">{{ wtf.quick_form(form) }}</div>
  18. {% endblock %}

表单校验

  1. @app.route('/', methods=['GET', 'POST'])
  2. def index():
  3. # 创建表单对象
  4. form = NameForm()
  5. name = None
  6. # 表单校验
  7. if form.validate_on_submit():
  8. # 通过校验,则取出数据
  9. name = form.name.data
  10. form.name.data = ''
  11. # 渲染时分配到模板文件
  12. return render_template('form.html', form=form, name=name)
  13. POST重定向GET解决重复提交的问题
  14.  
  15. @app.route('/wtform/', methods=['GET','POST'])
  16. def wtform():
  17. form = MyForm()
  18. # 判断form表单中的数据是否通过校验
  19. if form.validate_on_submit():
  20. # 通过校验,则取出数据。
  21. name = form.name.data
  22. last_name = session.get('name') or None
  23. # 判断这次提交的name是否和上次的相等
  24. if last_name and last_name == name:
  25. return '老铁别重复提交了'
  26. else:
  27. # 不是重复提交,设置session
  28. session['name'] = name
  29. return render_template('wtform.html',form=form, name=name)
  30. return render_template('wtform.html', form=form)

常见字段类型

  1. 字段类型 说明
  2. StringField 普通文本字段
  3. PasswordField 密码文本字段
  4. SubmitField 提交按钮
  5. HiddenField 隐藏文本字段
  6. TextAreaField 多行文本字段
  7. DateField 文本字段,datetime.date格式
  8. DateTimeField 文本字段,datetime.datetime格式
  9. IntegerField 文本字段,整数类型
  10. FloatField 文本字段,小数类型
  11. BooleanField 复选框,值为TrueFalse
  12. RadioField 单选框
  13. SelectField 下拉列表
  14. FileField 文件上传字段

常见验证器类

  1. 验证器 说明
  2. DataRequired 确保字段有值(并且if判断为真)
  3. Email 邮箱地址
  4. IPAddress IPv4IP地址
  5. Length 规定字符长度
  6. NumberRange 输入数值的范围
  7. EqualTo 验证两个字段的一致性
  8. URL 有效的URL
  9. Regexp 正则验证
  10. 自定义字段验证:就是写一个'validate_字段'的函数,如下:
  11.  
  12. class NameForm(FlaskForm):
  13. name = StringField('用户名', validators=[DataRequired()])
  14. submit = SubmitField('提交')

  15. # 自定义字段验证
  16. def validate_name(self, field):
  17. if len(field.data) < 6:
  18. raise ValidationError('用户名长度不能少于6个字符')

  

Flask之WTF的更多相关文章

  1. from flask.ext.wtf import Form导入报错

    问题来源: 在学习Flask网上教程(PS:中文版教程链接,英文版教程其中代码是对的,运行没错误,我为了看的快一些,所以就直接看的中文版>~<,英文版教程链接)时,使用如下代码: from ...

  2. ImportError: No module named flask.ext.wtf 解决方法

    install pip install flask.ext.wtf

  3. 自动化运维:网站svn代码上线更新(flask+saltstack)

    阶段性总结:      跌跌撞撞的用了一周左右的时间做完了网站自动升级功能,中间遇到了很多的问题,也学到了很多,在此做一个总结.   1.整体架构: 后台:nginx+uwsgi  #nginx提供w ...

  4. 【Flask】Flask快速玩框架

    最近比较忙 快速玩Flask框架,为微博做些准备 part 1 python程序 from flask importFlask, render_template, session, redirect, ...

  5. Python轻量Web框架Flask使用

    http://blog.csdn.net/jacman/article/details/49098819 目录(?)[+] Flask安装 Python开发工具EclipsePyDev准备 Flask ...

  6. Flask Web Development —— Web表单(上)

    Flask-WTF扩展使得处理web表单能获得更愉快的体验.该扩展是一个封装了与框架无关的WTForms包的Flask集成. Flask-WTF和它的依赖集可以通过pip来安装: (venv) $ p ...

  7. Flask学习记录之Flask-WTF

    Flask-wtf时Wtforms库的flask框架扩展,能够方便的处理Web表单 一.定义一个web表单 使用flask-wtf时,每个web表单都由一个继承自flask.ext.wtf.Form的 ...

  8. flask 后台表单验证模块

    我不想直接用flask的wtf模块,太大,功能太多,用不了.但后台也不能不做验证吧,我比较懒,不想一行一行写代码验证,所以就写了一个验证模块,对于小项目也够用了 # encoding=utf-8 # ...

  9. flask笔记二

    web表单 web表单是浏览者和网之间的一个互动平台,完成浏览器和服务器之间的数据交互. 1.用Flask-WTF来处理表单 (1)在根目录下编辑扩展配置--config.py CSRF_ENABLE ...

随机推荐

  1. Mockito在JUnit测试中的使用

    Mockito是一种用于替代在测试中难以实现的成员,从而让testcase能顺利覆盖到目标代码的手段.下面例子将展示Mockito的使用. 完整代码下载:https://files.cnblogs.c ...

  2. Mybatis-使用注解开发

    使用注解开发 [toc] 1. 面向接口编程 大家之前都学过面向对象编程,也学习过接口,但在真正的开发中,很多时候我们会选择面向接口编程 根本原因 : 解耦 , 可拓展 , 提高复用 , 分层开发中 ...

  3. python之类方法和静态方法

    在类中定义的函数称为方法,主要有三种:实例方法.类方法.静态方法. class MyTest(): # 普通实例函数 def func1(self, arg1, arg2): pass # 类函数 @ ...

  4. python之map

    python之Map函数   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 # map()函数使用举例 # 功能: ...

  5. Python 3 列表

    列表:是可变的序列,也是一种可以存储各种数据类型的集合,用中括号([])表示列表的开始和结束,元素之间用逗号(,)分隔.列表中每个元素提供一个对应的下标. 1.列表的基本格式表示: 2.列表的不同数据 ...

  6. Java知识点JUC总结

    JUC:java.util.concurrent (Java并发编程工具类) 一般面试提问:面向对象和高级语法.Java集合类.Java多线程.JUC 和高并发.Java IO和 NIO 获取多线程的 ...

  7. 初学 React native | 环境搭建(在模拟器上运行)

    我的电脑是windows 所以就以 windows上+Android 配置React native 环境 网上的安装教程非常多,我总结了一下,配置环境时出错原因主要是node java python ...

  8. 1.10HDFS 回收站机制

  9. SpringBoot中的异步编程

    @Async 是什么 void test() { A(); B(); C(); } 复制代码 在没有Async的情况下,上面的方法是顺序执行的,也可以称为同步调用. B要在A执行完毕之后执行,C需要在 ...

  10. 初探JVM

    JVM探究 请你谈谈你对JVM的理解?java8虚拟机和之前的变化更新? 什么是OOM,什么是栈溢出StackOverFlowError?怎么分析? JVM的常用调优参数? 内存快照如何抓取,怎么分析 ...