flask-wtf使用
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使用的更多相关文章
- Flask - WTF和WTForms创建表单
目录 Flask - WTF和WTForms创建表单 一. Flask-WTF 1.创建基础表单 2.CSRF保护 3.验证表单 4.文件上传 5.验证码 二. WTForms 1. field字段 ...
- 【Flask】 结合wtforms的文件上传表单
表单中的文件上传 基本的表单渲染,表单类设置等等就不多说了,参看另一个文章即可.但是那篇文章里没有提到对于FileField,也就是上传文件的表单字段是如何处理,后端又是如何实现接受上传过来的文件的. ...
- Flask 入门(第一篇)
1. 认识 Flask Flask 是一个微型 Web 框架,依赖于 jinjia2 模板系统和 Werkzeug WSGI(本质为 Socket 服务端) 服务,默认情况不支持数据库抽象层.表单验证 ...
- 用 Flask 来写个轻博客 (13) — M(V)C_WTForms 服务端表单检验
目录 目录 前文列表 WTForms WTF 的基础使用 常用的字段类型 fieldsDateField fieldsIntegerField fieldsFloatField fieldsStrin ...
- flask修改flask_wtf使其支持json数据的validation验证
flask默认是前后端不分离策略,前端通过flask+wtf表单来传递post,put...等数据. 现在前后端分离是趋势,那么对flask进行一定的修改,变为前后端分离,在前端页面中请求后端,那么请 ...
- Flask Jinja2 知识点
Jinja2模板引擎使用以下分隔符从HTML转义. {% ... %}用于语句 {{ ... }}用于表达式可以打印到模板输出 {# ... #}用于未包含在模板输出中的注释 # ... ##用于行语 ...
- python flask框架详解
Flask是一个Python编写的Web 微框架,让我们可以使用Python语言快速实现一个网站或Web服务.本文参考自Flask官方文档, 英文不好的同学也可以参考中文文档 1.安装flask pi ...
- 不管你是否已经准备面试, 这45道Python面试题都对你非常有帮助!(mark!)
1)什么是Python?使用Python有什么好处? Python是一种编程语言,包含对象,模块,线程,异常和自动内存管理.蟒蛇的好处在于它简单易用,可移植,可扩展,内置数据结构,并且它是一个开源的. ...
- Python面试应急5分钟!
不论你是初入江湖,还是江湖老手,只要你想给自己一个定位那就少不了面试!面试的重要性相信大家都知道把,这就是我们常说的“第一印象”,给大家说一下我的面试心得把,面试前的紧张是要的,因为这能让你充分准 ...
- python 全栈之路
目录 Python 全栈之路 一. Python 1. Python基础知识部分 2. Python -函数 3. Python - 模块 4. Python - 面对对象 5. Python - 文 ...
随机推荐
- kubernetes系列—Ubuntu下搭建Kubernetes集群--k8s部署
1.kubernetes安装介绍 1.1 K8S架构图 1.2 K8S搭建安装示意图 2.安装kubernetes 2.1 关闭防火墙 在每台机器上关闭防火墙: ① 关闭服务,并设为开机不自启 $ ...
- 面向对象3(Java)
多态 基本介绍 即同一方法可以根据发送对象的不同而采用多种不同的行为方式 一个对象的实际类型是确定的,但是可以指向对象的引用类型可以很多 多态存在的条件:a.有继承关系:b.子类重写父类方法:c.父类 ...
- js 实现全屏预览(F11功能)--转
参考文档 http://t.zoukankan.com/ghfjj-p-6322415.html HTML代码 <body> <div id="content" ...
- 记 第一次linux下简易部署 django uwsgi nginx
1.首先确定django项目是跑起来的 2.装nginx uwsgi ,网上教程一大堆 3.uwsgi的配置了 我是通过ini启动的 随意找个顺手的文件夹创建uwsgi.ini文件 我是在/home ...
- 5vue 样式绑定
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- heimaJava17
java IO流 缓冲流 概念 缓存流也称为高效流.或者高级流.之前学习的字节流也可以称为原始流 作用:缓冲流自带缓冲区.可以提高原始字节流.字符流读写数据的性能 分类 字节缓冲流 字节缓冲输入流:B ...
- OperationContext
public void Add(double x, double y) { double result = x + y; ICallback callback = OperationContext.C ...
- 初识MPC
MPC调研报告 这是一篇关于MPC的调研报告,主要介绍了我对MPC领域的一些基础认识.全文按照这样的方式组织:第一节我介绍了什么是MPC以及MPC的起源:第二节介绍了MPC领域常用的一些符号和安全 ...
- C# 将实体转xml/xml转实体
xml转实体 /// <summary> /// 把xml转换成实体 /// </summary> /// <typeparam name="T"&g ...
- windows系统,自动设置--shutdown命令了解
参考:https://baike.baidu.com/item/shutdown/10469108?fr=aladdin 比如你的电脑要在24:00关机,可以选择"开始运行",输入 ...