1 配置

可以使用Flask-WTF来处理web表单,在使用之前要先配置下,打开config.py,编辑添加如下内容

WTF_CSRF_ENABLED = True
SECRET_KEY = 'you-will-never-guess'

WTF_CSRF_ENABLED设置为True主要是开启CSRF保护,SECRET_KEY是为了实现CSRF保护,Flask-WTF需要应用程序去配置一个加密密钥。Flask-WTF使用这个密钥去生成加密令牌用于验证请求表单数据的真实性,注:为了提高安全性,密钥应该存储在一个环境变量中,而不是嵌入到代码中。配置完成后要通知Flask去加载这个配置文件,编辑app/__init__.py,添加如下内容

from flask import Flask

app = Flask(__name__)
app.config.from_object('config') from app import views

2 表单类

使用Flask-WTF时,每个web表单是由继承自 Form 类的子类来展现的。该类在表单中定义了一组表单域,每个都表示为一个对象。每个表单域都可以连接到一个或多个 validators ; validators 是一个用于检查用户提交的输入是否合法的函数,app/forms.py 专门用来存放表单类,用例

from flask.ext.wtf import Form
from wtforms import StringField, SubmitField
from wtforms.validators import Required class NameForm(Form):
name = StringField('What is your name?', validators=[Required()])
submit = SubmitField('Submit')

示例中, NameForm 表单有一个 name 文本框和 submit 提交按钮。 StringField 类表示一个 type="text" 属性的 <input> 标签。 SubmitField 类表示一个 type="submit" 属性的 <input> 标签。表单域构造函数的第一个参数是一个 label ,在渲染表单到HTML时会使用。StringField 构造函数包含可选参数 validators ,它定义了一组检查来验证用户提交的数据。 Required() 验证确保提交的表单域不为空

WTForms标准HTML表单域

WTForms验证

3 表单渲染模版

假设视图函数传递一个参数名为 form 的NameForm 实例给模板,模板就会生成一个简单的HTML表单,如下所示:假设名字为nameform.html

<form method="POST">
{ { form.name.label }} { { form.name() }}
{ { form.submit() }}
</form>

当然,结果是什么都没有。为了改变表单的外观显示,任何发送给该表单域的参数会被转换为HTML表单域属性;例如,你可以给定表单域 id 或 class 属性,然后定义CSS样式:即使有HTML属性,努力用这种方式渲染表单是非常重要的,所以最好是尽可能的使用Bootstrap自带的一系列表单样式。Flask-Bootstrap使用Bootstrap的预定义表单样式来提供高级的帮助函数来渲染整个Flask-WTF表单,这些操作都只需要一个调用即可完成

<form method="POST">
{ { form.name.label }} { { form.name(id='my-text-field') }}
{ { form.submit() }}
</form>
---完善 nameform.html

<!-- extend from base layout -->

{% extends "base.html" %}

{% block content %}

<h1>{{title}}</h1>

<form action="" method="post" name="nameform">

{{ form.hidden_tag() }}

{{ form.name.label }} {{ form.name() }}

{{ form.submit() }}

</form>

{% endblock %}

4 视图函数使用表单

from .forms import NameForm

@app.route('/nameform', methods=['GET', 'POST'])

def nameform():

form = NameForm()

"""

处理接收表格数据,Flask-WTF让这个工作变得简单,validate_on_submit

处理了所有表格的基本工作,只需要判断然后直接引用数据即可

调用validate_on_submit时,这个函数会尝试接收用户提交的所有数据,然后做下表格校验,

如果一切校验都通过,意味着数据可以被合法安全处理,如果校验不通过会直接刷新停在原来页面

那如何做错误信息提示呢?

"""

if form.validate_on_submit():

flash('%s' %(form.name.data))

return redirect('/index')

return render_template('nameform.html',

title='nameform',

form=form)

效果

5 出错提醒

name再加个校验器,需要输入最少6个字符,最多35个字符

class NameForm(Form):
name = StringField('What is your name?', validators=[Required(), validators.Length(min=6, max=35)])
submit = SubmitField('Submit')

点击无反应,我们希望是能提示用户错误信息,在哪里加,在渲染的html模版里面,错误信息会存放到form.FieldName.errors里面,改进渲染模版

<!-- extend from base layout -->

{% extends "base.html" %}

{% block content %}

<h1>{{title}}</h1>

<form action="" method="post" name="nameform">

{{ form.hidden_tag() }}

<p>

{{ form.name.label }} {{ form.name() }}

{% for error in form.name.errors %}

<span style="color: red;">[{{ error }}]</span>

{% endfor %}

</p>

<p>

{{ form.submit() }}

</p>

</form>

{% endblock %}

 

表单 Flask-WTF - 使用的更多相关文章

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

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

  2. Flask教程 —— Web表单(上)

    第二章中介绍的request对象公开了所有客户端发送的请求信息.特别是request.form可以访问POST请求提交的表单数据. 尽管Flask的request对象提供的支持足以处理web表单,但依 ...

  3. Flask - WTF和WTForms创建表单

    目录 Flask - WTF和WTForms创建表单 一. Flask-WTF 1.创建基础表单 2.CSRF保护 3.验证表单 4.文件上传 5.验证码 二. WTForms 1. field字段 ...

  4. 【Flask】 python学习第一章 - 6.0 WTF表单 数据库 蓝图

    WTF表单  wtf.py pip install flask-wtf  # 安装 from flask_wtf import FlaskForm from wtform import StringF ...

  5. flask 后台表单验证模块

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

  6. [flask/python/web] 解析flask web开发(Miguel著)一书第11章主页不显示博文表单的问题

    ---------------------------------------------以下内容2017.7.14更新---------------------------------------- ...

  7. 【Flask】 结合wtforms的文件上传表单

    表单中的文件上传 基本的表单渲染,表单类设置等等就不多说了,参看另一个文章即可.但是那篇文章里没有提到对于FileField,也就是上传文件的表单字段是如何处理,后端又是如何实现接受上传过来的文件的. ...

  8. 【Flask】 WTForm表单编程

    WTForm表单编程 在网页中,为了和用户进行信息交互总是不得不出现一些表单.flask设计了WTForm表单库来使flask可以更加简便地管理操作表单数据.WTForm中最重要的几个概念如下: Fo ...

  9. Flask学习 三 web表单

    web表单 pip install flask-wtf 实现csrf保护 app.config['SECRET_KEY']='hard to guess string' # 可以用来存储框架,扩展,程 ...

  10. Flask入门之flask-wtf表单处理

    参考文章 1. 使用 WTForms 进行表单验证  第11集 #Sample.py # coding:utf-8 from flask import Flask,render_template,re ...

随机推荐

  1. HashSet和CopyOnWriteArraySet(转载)

    前言 这篇文章的目的如下: HashSet是如何保证元素的不重复和无序 HashSet的增删(改查?)原理 CopyOnWriteArraySet支持并发的原理 CopyOnWriteArraySet ...

  2. 图片预加载的插件使用-jquery.imgpreload.min.js

    使用方法: //图片预加载 var the_images = [];//新建一个数组,然后将要加载的图片地址推入这个数组中: the_images.push( 'bg.jpg' ); var load ...

  3. umi model 注册

    model 分两类,一是全局 model,二是页面 model.全局 model 存于 /src/models/ 目录,所有页面都可引用:页面 model 不能被其他页面所引用. 规则如下: src/ ...

  4. spider _其他库的简单操作与方法

    PHP : 网络IO java : 代码笨重,代码量很大 C/C++ :虽然效率高,但是代码成型很慢 1 通用网络爬虫(搜索引擎引用,需要遵守robots协议) 1 搜索引擎如何获取一个新网站的 UR ...

  5. Linux学习之九-Linux系统定时任务

    Linux系统定时任务 在一些实际工作中需要机器在某个时间自动执行某个任务,不需要人为在此时刻参与,可以建立一个定时任务. crond 服务是linux下用来周期性的执行某种任务或等待处理某些事件的一 ...

  6. Linux学习之八-配置FTP连接Linux服务器

    配置ftp连接Linux服务器 通过配置ftp服务器,可以实现局域网内共享文件,甚至不同用户具有不同权限,需要的工具有Windows平台ftp客户端FileZilla(免费开源) 下载地址:https ...

  7. H5中的requestAnimationFrame

    这两天做一个公告展示轮播的动画,刚开始是用setinterval写的,后来发现做出来的动画效果有抖动的现象,动画不流畅,遂决定试试requestAnimationFrame,之前也只是耳闻,没有用过, ...

  8. PAT Basic 1075 链表元素分类 (25 分)

    给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而 [0, K] 区间内的元素都排在大于 K 的元素前面.但每一类内部元素的顺序是不能改变的.例如:给定链表为 ...

  9. 标准库类型之string

    上几篇中已经实现了一个简单版的String字符串类,但是实际开发中不用我们自己实现了,学习Java的也知道有一个系统现成的用,当然强大的C++也不例外,下面就来学习一下系统定义的string是怎么用的 ...

  10. ZZNUOJ-2154:单身狗线下聚会【求N个数的最小公倍数,会超longlong,大数乘法,Java】

    2154: 单身狗线下聚会 题目描述 马上就到七夕节了,单身狗们决定聚一聚.但是它们沉迷B站上的lo娘,他们每沉迷 ai 单身狗时间(这是它们专业计时)后就会休息 单身狗时间.它们想找到一个时间正好他 ...