Web应用程序的一个重要方面是为用户提供一个用户界面。HTML提供了一个

标签,用于设计一个接口。一个Form 元素,例如文本输入,单选框等可以适当地使用。

通过GET或POST方法将用户输入的数据以Http请求消息的形式提交给服务器端脚本。

  • 服务器端脚本必须从http请求数据重新创建表单元素。所以实际上,表单元素必须被定义两次 - 一次是HTML,一次是服务器端脚本。

  • 使用HTML表单的另一个缺点是很难(如果不是不可能)动态地呈现表单元素。HTML本身无法验证用户的输入。

这就是 WTForms ,一个灵活的表单,渲染和验证库来得方便的地方。Flask-WTF扩展为这个 WTForms 库提供了一个简单的接口。

使用 Flask-WTF ,我们可以在我们的Python脚本中定义表单域并使用HTML模板来呈现它们。也可以将验证应用于 WTF 字段。

让我们看看这个动态生成的HTML如何工作。

首先,需要安装Flask-WTF扩展。

pip install flask-WTF

已安装的软件包包含一个 Form 类,该类必须用作用户定义表单的父级。

WTforms 包包含各种表单域的定义。下面列出了一些 标准表单字段 。

序号 标准表格字段和说明
1 TextField 代表<input type ='text'> HTML表单元素
2 BooleanField 代表<input type ='checkbox'> HTML表单元素
3 DecimalField 用小数显示数字的文本字段
4 IntegerField 用于显示整数的TextField
5 RadioField 代表<input type ='radio'> HTML表单元素
6 SelectField 表示选择表单元素
7 TextAreaField 代表<testarea> html表单元素
8 PasswordField 代表<input type ='password'> HTML表单元素
9 SubmitField 表示<input type ='submit'>表单元素

例如,可以设计一个包含文本字段的表单,如下所示 -

from flask_wtf import Form
from wtforms import TextField class ContactForm(Form):
name = TextField("Name Of Student")

除了 'name' 字段之外,还会自动创建一个CSRF令牌的隐藏字段。这是为了防止 跨站请求伪造 攻击。

渲染时,这将产生一个等效的HTML脚本,如下所示。

<input id = "csrf_token" name = "csrf_token" type = "hidden" />
<label for = "name">Name Of Student</label><br>
<input id = "name" name = "name" type = "text" value = "" />

用户定义的表单类在Flask应用程序中使用,表单使用模板呈现。

from flask import Flask, render_template
from forms import ContactForm
app = Flask(__name__)
app.secret_key = 'development key' @app.route('/contact')
def contact():
form = ContactForm()
return render_template('contact.html', form = form) if __name__ == '__main__':
app.run(debug = True)

WTForms包也包含验证器类。在验证表单域时非常有用。以下列表显示了常用的验证器。

Sr.No 验证器类和描述
1 DataRequired 检查输入栏是否为空
2 Email 检查字段中的文本是否遵循电子邮件ID约定
3 IPAddress 验证输入字段中的IP地址
4 Length 验证输入字段中字符串的长度是否在给定范围内
5 NumberRange 在给定范围内的输入字段中验证一个数字
6 URL 验证输入字段中输入的URL

现在我们将以联系表格的形式为 名称 字段应用 'DataRequired' 验证规则。 **

name = TextField("Name Of Student",[validators.Required("Please enter your name.")])

表单对象的 validate() 函数验证表单数据,并在验证失败时抛出验证错误。该 错误 消息被发送到模板。在HTML模板中,错误消息是动态呈现的。

{% for message in form.name.errors %}
{{ message }}
{% endfor %}

以下示例演示了上面给出的概念。 Contact form 的设计如下 (forms.py) 。

from flask_wtf import Form
from wtforms import TextField, IntegerField, TextAreaField, SubmitField, RadioField,
SelectField from wtforms import validators, ValidationError class ContactForm(Form):
name = TextField("Name Of Student",[validators.Required("Please enter
your name.")])
Gender = RadioField('Gender', choices = [('M','Male'),('F','Female')])
Address = TextAreaField("Address") email = TextField("Email",[validators.Required("Please enter your email address."),
validators.Email("Please enter your email address.")]) Age = IntegerField("age")
language = SelectField('Languages', choices = [('cpp', 'C++'),
('py', 'Python')])
submit = SubmitField("Send")

验证器应用于 名称 和 电子邮件 字段。

下面给出的是Flask应用程序脚本 (formexample.py) 。

from flask import Flask, render_template, request, flash
from forms import ContactForm
app = Flask(__name__)
app.secret_key = 'development key' @app.route('/contact', methods = ['GET', 'POST'])
def contact():
form = ContactForm() if request.method == 'POST':
if form.validate() == False:
flash('All fields are required.')
return render_template('contact.html', form = form)
else:
return render_template('success.html')
elif request.method == 'GET':
return render_template('contact.html', form = form) if __name__ == '__main__':
app.run(debug = True)

模板的脚本 (contact.html) 如下所示 -

<!doctype html>
<html>
<body> <h2 style = "text-align: center;">Contact Form</h2> {% for message in form.name.errors %}
<div>{{ message }}</div>
{% endfor %} {% for message in form.email.errors %}
<div>{{ message }}</div>
{% endfor %} <form action = "http://localhost:5000/contact" method = post>
<fieldset>
<legend>Contact Form</legend>
{{ form.hidden_tag() }} <div style = font-size:20px; font-weight:bold; margin-left:150px;>
{{ form.name.label }}<br>
{{ form.name }}
<br> {{ form.Gender.label }} {{ form.Gender }}
{{ form.Address.label }}<br>
{{ form.Address }}
<br> {{ form.email.label }}<br>
{{ form.email }}
<br> {{ form.Age.label }}<br>
{{ form.Age }}
<br> {{ form.language.label }}<br>
{{ form.language }}
<br>
{{ form.submit }}
</div> </fieldset>
</form> </body>
</html>

flask-wtf使用的更多相关文章

  1. Flask - WTF和WTForms创建表单

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

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

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

  3. Flask 入门(第一篇)

    1. 认识 Flask Flask 是一个微型 Web 框架,依赖于 jinjia2 模板系统和 Werkzeug WSGI(本质为 Socket 服务端) 服务,默认情况不支持数据库抽象层.表单验证 ...

  4. 用 Flask 来写个轻博客 (13) — M(V)C_WTForms 服务端表单检验

    目录 目录 前文列表 WTForms WTF 的基础使用 常用的字段类型 fieldsDateField fieldsIntegerField fieldsFloatField fieldsStrin ...

  5. flask修改flask_wtf使其支持json数据的validation验证

    flask默认是前后端不分离策略,前端通过flask+wtf表单来传递post,put...等数据. 现在前后端分离是趋势,那么对flask进行一定的修改,变为前后端分离,在前端页面中请求后端,那么请 ...

  6. Flask Jinja2 知识点

    Jinja2模板引擎使用以下分隔符从HTML转义. {% ... %}用于语句 {{ ... }}用于表达式可以打印到模板输出 {# ... #}用于未包含在模板输出中的注释 # ... ##用于行语 ...

  7. python flask框架详解

    Flask是一个Python编写的Web 微框架,让我们可以使用Python语言快速实现一个网站或Web服务.本文参考自Flask官方文档, 英文不好的同学也可以参考中文文档 1.安装flask pi ...

  8. 不管你是否已经准备面试, 这45道Python面试题都对你非常有帮助!(mark!)

    1)什么是Python?使用Python有什么好处? Python是一种编程语言,包含对象,模块,线程,异常和自动内存管理.蟒蛇的好处在于它简单易用,可移植,可扩展,内置数据结构,并且它是一个开源的. ...

  9. Python面试应急5分钟!

    ​ 不论你是初入江湖,还是江湖老手,只要你想给自己一个定位那就少不了面试!面试的重要性相信大家都知道把,这就是我们常说的“第一印象”,给大家说一下我的面试心得把,面试前的紧张是要的,因为这能让你充分准 ...

  10. python 全栈之路

    目录 Python 全栈之路 一. Python 1. Python基础知识部分 2. Python -函数 3. Python - 模块 4. Python - 面对对象 5. Python - 文 ...

随机推荐

  1. kubernetes系列—Ubuntu下搭建Kubernetes集群--k8s部署

    1.kubernetes安装介绍 1.1 K8S架构图 1.2 K8S搭建安装示意图 2.安装kubernetes 2.1  关闭防火墙 在每台机器上关闭防火墙: ① 关闭服务,并设为开机不自启 $ ...

  2. 面向对象3(Java)

    多态 基本介绍 即同一方法可以根据发送对象的不同而采用多种不同的行为方式 一个对象的实际类型是确定的,但是可以指向对象的引用类型可以很多 多态存在的条件:a.有继承关系:b.子类重写父类方法:c.父类 ...

  3. js 实现全屏预览(F11功能)--转

    参考文档   http://t.zoukankan.com/ghfjj-p-6322415.html HTML代码 <body> <div id="content" ...

  4. 记 第一次linux下简易部署 django uwsgi nginx

    1.首先确定django项目是跑起来的 2.装nginx  uwsgi ,网上教程一大堆 3.uwsgi的配置了 我是通过ini启动的 随意找个顺手的文件夹创建uwsgi.ini文件 我是在/home ...

  5. 5vue 样式绑定

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. heimaJava17

    java IO流 缓冲流 概念 缓存流也称为高效流.或者高级流.之前学习的字节流也可以称为原始流 作用:缓冲流自带缓冲区.可以提高原始字节流.字符流读写数据的性能 分类 字节缓冲流 字节缓冲输入流:B ...

  7. OperationContext

    public void Add(double x, double y) { double result = x + y; ICallback callback = OperationContext.C ...

  8. 初识MPC

    MPC调研报告 ​ 这是一篇关于MPC的调研报告,主要介绍了我对MPC领域的一些基础认识.全文按照这样的方式组织:第一节我介绍了什么是MPC以及MPC的起源:第二节介绍了MPC领域常用的一些符号和安全 ...

  9. C# 将实体转xml/xml转实体

    xml转实体 /// <summary> /// 把xml转换成实体 /// </summary> /// <typeparam name="T"&g ...

  10. windows系统,自动设置--shutdown命令了解

    参考:https://baike.baidu.com/item/shutdown/10469108?fr=aladdin 比如你的电脑要在24:00关机,可以选择"开始运行",输入 ...