Flask之WTF
Flask-WTF是什么?
是一个关于表单的扩展库,可以自动生成表单的HTML代码和验证提交的表单数据,并且提供跨站请求伪造(Cross-Site Request Forgery)保护的功能,使用非常方便
使用步骤:
1.创建表单类,实例化对象
2.在模板中使用该对象
3.在试图函数中处理表单
定义表单类
- 从 flask_wtf 进口 FlaskForm
- 从 wtforms 导入 StringField
- 从 wtforms.validators 导入 DataRequired
- class MyForm (FlaskForm ):
- name = StringField ('name' , validators = [ DataRequired ()])
添加视图函数
- @app.route('/')
- def index():
- # 创建表单对象
- form = NameForm()
- # 渲染时分配到模板文件
- return render_template('form.html', form=form)
表单渲染
- {# 原生渲染 #}
- {# 判断是否有错误#}
- {% if form.name.errors %}
- {{ form.name.errors[0] }}
- {% endif %}
- <h1>Hello {{ name }}</h1>
- <form action="{{ url_for('wtform') }}" method="post" >
- # {{form.hidden_tag()}}里面放的也就是csrf_token
- {{ form.csrf_token }}
- {{ form.name.label() }}{{ form.name(id='xx',class='yyy') }}
- {{ form.submit() }}
- </form>
-
- {# bootstrap渲染 #}
- {% extends 'bootstrap/base.html' %}
- {% import 'bootstrap/wtf.html' as wtf %}
- {% block content %}
- <div class="container">{{ wtf.quick_form(form) }}</div>
- {% endblock %}
表单校验
- @app.route('/', methods=['GET', 'POST'])
- def index():
- # 创建表单对象
- form = NameForm()
- name = None
- # 表单校验
- if form.validate_on_submit():
- # 通过校验,则取出数据
- name = form.name.data
- form.name.data = ''
- # 渲染时分配到模板文件
- return render_template('form.html', form=form, name=name)
- POST重定向GET解决重复提交的问题
- @app.route('/wtform/', methods=['GET','POST'])
- def wtform():
- form = MyForm()
- # 判断form表单中的数据是否通过校验
- if form.validate_on_submit():
- # 通过校验,则取出数据。
- name = form.name.data
- last_name = session.get('name') or None
- # 判断这次提交的name是否和上次的相等
- if last_name and last_name == name:
- return '老铁别重复提交了'
- else:
- # 不是重复提交,设置session
- session['name'] = name
- return render_template('wtform.html',form=form, name=name)
- return render_template('wtform.html', form=form)
常见字段类型
- 字段类型 说明
- StringField 普通文本字段
- PasswordField 密码文本字段
- SubmitField 提交按钮
- HiddenField 隐藏文本字段
- TextAreaField 多行文本字段
- DateField 文本字段,datetime.date格式
- DateTimeField 文本字段,datetime.datetime格式
- IntegerField 文本字段,整数类型
- FloatField 文本字段,小数类型
- BooleanField 复选框,值为True或False
- RadioField 单选框
- SelectField 下拉列表
- FileField 文件上传字段
常见验证器类
- 验证器 说明
- DataRequired 确保字段有值(并且if判断为真)
- Email 邮箱地址
- IPAddress IPv4的IP地址
- Length 规定字符长度
- NumberRange 输入数值的范围
- EqualTo 验证两个字段的一致性
- URL 有效的URL
- Regexp 正则验证
- 自定义字段验证:就是写一个'validate_字段'的函数,如下:
- class NameForm(FlaskForm):
- name = StringField('用户名', validators=[DataRequired()])
- submit = SubmitField('提交')
-
- # 自定义字段验证
- def validate_name(self, field):
- if len(field.data) < 6:
- raise ValidationError('用户名长度不能少于6个字符')
Flask之WTF的更多相关文章
- from flask.ext.wtf import Form导入报错
问题来源: 在学习Flask网上教程(PS:中文版教程链接,英文版教程其中代码是对的,运行没错误,我为了看的快一些,所以就直接看的中文版>~<,英文版教程链接)时,使用如下代码: from ...
- ImportError: No module named flask.ext.wtf 解决方法
install pip install flask.ext.wtf
- 自动化运维:网站svn代码上线更新(flask+saltstack)
阶段性总结: 跌跌撞撞的用了一周左右的时间做完了网站自动升级功能,中间遇到了很多的问题,也学到了很多,在此做一个总结. 1.整体架构: 后台:nginx+uwsgi #nginx提供w ...
- 【Flask】Flask快速玩框架
最近比较忙 快速玩Flask框架,为微博做些准备 part 1 python程序 from flask importFlask, render_template, session, redirect, ...
- Python轻量Web框架Flask使用
http://blog.csdn.net/jacman/article/details/49098819 目录(?)[+] Flask安装 Python开发工具EclipsePyDev准备 Flask ...
- Flask Web Development —— Web表单(上)
Flask-WTF扩展使得处理web表单能获得更愉快的体验.该扩展是一个封装了与框架无关的WTForms包的Flask集成. Flask-WTF和它的依赖集可以通过pip来安装: (venv) $ p ...
- Flask学习记录之Flask-WTF
Flask-wtf时Wtforms库的flask框架扩展,能够方便的处理Web表单 一.定义一个web表单 使用flask-wtf时,每个web表单都由一个继承自flask.ext.wtf.Form的 ...
- flask 后台表单验证模块
我不想直接用flask的wtf模块,太大,功能太多,用不了.但后台也不能不做验证吧,我比较懒,不想一行一行写代码验证,所以就写了一个验证模块,对于小项目也够用了 # encoding=utf-8 # ...
- flask笔记二
web表单 web表单是浏览者和网之间的一个互动平台,完成浏览器和服务器之间的数据交互. 1.用Flask-WTF来处理表单 (1)在根目录下编辑扩展配置--config.py CSRF_ENABLE ...
随机推荐
- Mockito在JUnit测试中的使用
Mockito是一种用于替代在测试中难以实现的成员,从而让testcase能顺利覆盖到目标代码的手段.下面例子将展示Mockito的使用. 完整代码下载:https://files.cnblogs.c ...
- Mybatis-使用注解开发
使用注解开发 [toc] 1. 面向接口编程 大家之前都学过面向对象编程,也学习过接口,但在真正的开发中,很多时候我们会选择面向接口编程 根本原因 : 解耦 , 可拓展 , 提高复用 , 分层开发中 ...
- python之类方法和静态方法
在类中定义的函数称为方法,主要有三种:实例方法.类方法.静态方法. class MyTest(): # 普通实例函数 def func1(self, arg1, arg2): pass # 类函数 @ ...
- 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()函数使用举例 # 功能: ...
- Python 3 列表
列表:是可变的序列,也是一种可以存储各种数据类型的集合,用中括号([])表示列表的开始和结束,元素之间用逗号(,)分隔.列表中每个元素提供一个对应的下标. 1.列表的基本格式表示: 2.列表的不同数据 ...
- Java知识点JUC总结
JUC:java.util.concurrent (Java并发编程工具类) 一般面试提问:面向对象和高级语法.Java集合类.Java多线程.JUC 和高并发.Java IO和 NIO 获取多线程的 ...
- 初学 React native | 环境搭建(在模拟器上运行)
我的电脑是windows 所以就以 windows上+Android 配置React native 环境 网上的安装教程非常多,我总结了一下,配置环境时出错原因主要是node java python ...
- 1.10HDFS 回收站机制
- SpringBoot中的异步编程
@Async 是什么 void test() { A(); B(); C(); } 复制代码 在没有Async的情况下,上面的方法是顺序执行的,也可以称为同步调用. B要在A执行完毕之后执行,C需要在 ...
- 初探JVM
JVM探究 请你谈谈你对JVM的理解?java8虚拟机和之前的变化更新? 什么是OOM,什么是栈溢出StackOverFlowError?怎么分析? JVM的常用调优参数? 内存快照如何抓取,怎么分析 ...