Flask-WTF表单
Web表单
Web 表单是 Web 应用程序的基本功能。
它是HTML页面中负责数据采集的部件。表单有三个部分组成:表单标签、表单域、表单按钮。表单允许用户输入数据,负责HTML页面数据采集,通过表单将用户输入的数据提交给服务器。
在Flask中,为了处理web表单,我们可以使用 Flask-WTF 扩展,它封装了 WTForms,并且它有验证表单数据的功能
WTForms支持的HTML标准字段
| 字段对象 | 说明 | 
|---|---|
| StringField | 文本字段 | 
| TextAreaField | 多行文本字段 | 
| PasswordField | 密码文本字段 | 
| HiddenField | 隐藏文件字段 | 
| DateField | 文本字段,值为 datetime.date 文本格式 | 
| DateTimeField | 文本字段,值为 datetime.datetime 文本格式 | 
| IntegerField | 文本字段,值为整数 | 
| DecimalField | 文本字段,值为decimal.Decimal | 
| FloatField | 文本字段,值为浮点数 | 
| BooleanField | 复选框,值为True 和 False | 
| RadioField | 一组单选框 | 
| SelectField | 下拉列表 | 
| SelectMutipleField | 下拉列表,可选择多个值 | 
| FileField | 文件上传字段 | 
| SubmitField | 表单提交按钮 | 
| FormField | 把表单作为字段嵌入另一个表单 | 
| FieldList | 一组指定类型的字段 | 
WTForms常用验证函数
| 验证函数 | 说明 | 
|---|---|
| DataRequired | 确保字段中有数据 | 
| EqualTo | 比较两个字段的值,常用于比较两次密码输入 | 
| Length | 验证输入的字符串长度 | 
| NumberRange | 验证输入的值在数字范围内 | 
| URL | 验证URL | 
| AnyOf | 验证输入值在可选列表中 | 
| NoneOf | 验证输入值不在可选列表中 | 
使用 Flask-WTF 需要配置参数 SECRET_KEY。
CSRF_ENABLED是为了CSRF(跨站请求伪造)保护。 SECRET_KEY用来生成加密令牌,当CSRF激活的时候,该设置会根据设置的密匙生成加密令牌。
代码验证
使用 html 自带的表单
- 创建模板文件 
login.html,在其中直接写form表单: 
<form method="post">
    <label>用户名:</label><input type="text" name="username" placeholder="请输入用户名"><br/>
    <label>密码:</label><input type="password" name="password" placeholder="请输入密码"><br/>
    <label>确认密码:</label><input type="password" name="password2" placeholder="请输入确认密码"><br/>
    <input type="submit" value="注册">
</form>
{% for message in get_flashed_messages() %}
    {{ message }}
{% endfor %}
- 视图函数中获取表单数据验证登录逻辑:
 
@app.route('/demo1', methods=["get", "post"])
def demo1():
    if request.method == "POST":
        # 取到表单中提交上来的三个参数
        username = request.form.get("username")
        password = request.form.get("password")
        password2 = request.form.get("password2")
        if not all([username, password, password2]):
            # 向前端界面弹出一条提示(闪现消息)
            flash("参数不足")
        elif password != password2:
            flash("两次密码不一致")
        else:
            # 假装做注册操作
            print(username, password, password2)
            return "success"
    return render_template('temp_register.html')
使用 Flask-WTF 实现表单
- 配置参数,关闭 CSRF 校验
 
 app.config['WTF_CSRF_ENABLED'] = False
CSRF:跨站请求伪造,后续会讲到
模板页面:
<form method="post">
    {{ form.username.label }} {{ form.username }}<br/>
    {{ form.password.label }} {{ form.password }}<br/>
    {{ form.password2.label }} {{ form.password2 }}<br/>
    {{ form.submit }}
</form>
视图函数:
from flask import Flask,render_template, flash
#导入wtf扩展的表单类
from flask_wtf import FlaskForm
#导入自定义表单需要的字段
from wtforms import SubmitField,StringField,PasswordField
#导入wtf扩展提供的表单验证器
from wtforms.validators import DataRequired,EqualTo
app = Flask(__name__)
app.config['SECRET_KEY']='SECRET_KEY'
#自定义表单类,文本字段、密码字段、提交按钮
class RegisterForm(FlaskForm):
    username = StringField("用户名:", validators=[DataRequired("请输入用户名")], render_kw={"placeholder": "请输入用户名"})
    password = PasswordField("密码:", validators=[DataRequired("请输入密码")])
    password2 = PasswordField("确认密码:", validators=[DataRequired("请输入确认密码"), EqualTo("password", "两次密码不一致")])
    submit = SubmitField("注册")
#定义根路由视图函数,生成表单对象,获取表单数据,进行表单数据验证
@app.route('/demo2', methods=["get", "post"])
def demo2():
    register_form = RegisterForm()
    # 验证表单
    if register_form.validate_on_submit():
        # 如果代码能走到这个地方,那么就代码表单中所有的数据都能验证成功
        username = request.form.get("username")
        password = request.form.get("password")
        password2 = request.form.get("password2")
        # 假装做注册操作
        print(username, password, password2)
        return "success"
    else:
        if request.method == "POST":
            flash("参数有误或者不完整")
    return render_template('temp_register.html', form=register_form)
if __name__ == '__main__':
    app.run(debug=True)												
											Flask-WTF表单的更多相关文章
- 【Flask】 python学习第一章 - 6.0 WTF表单 数据库 蓝图
		
WTF表单 wtf.py pip install flask-wtf # 安装 from flask_wtf import FlaskForm from wtform import StringF ...
 - Flask入门 表单Flask-wtf form原生  Bootstrap渲染(七)
		
(1) 原生的表单 模板页面,form表单form.html <form action="{{ url_for('/check/') }}" method='post'> ...
 - WTF表单验证
		
WTF表单验证可分为3个步骤: ①导入wtf扩展提供的表单验证器.(from wtforms.validators import DataRequired,EqualTo) ②定义表单类 # 定义表单 ...
 - flask 后台表单验证模块
		
我不想直接用flask的wtf模块,太大,功能太多,用不了.但后台也不能不做验证吧,我比较懒,不想一行一行写代码验证,所以就写了一个验证模块,对于小项目也够用了 # encoding=utf-8 # ...
 - flask之表单验证 2018.12.23
		
#flask的消息闪现依赖于flash库,用户发送的请求方式存储在request模块中 #跳转依赖于redirect模块,还可以通过url_for方法来进行方法上的寻址 from flask impo ...
 - flask之表单
		
一:表单 表单用于注册,修改用户数据等场景. flask-wtf提供了一个包,可以创建表单:pip install flask-wtf 为了防止跨域请求,flask_wtf自己生成一个秘钥,用秘钥生成 ...
 - Flask 扩展 表单
		
pip install flask-wtf 一个简单的表单 from flask_wtf import Form from wtforms import StringField from wtform ...
 - flask form表单验证
		
新建forms.py文件 #!/usr/bin/env python #-*-coding:utf--*- #导入模块 from flask_wtf import FlaskForm #FlaskFo ...
 - flask 单个表单多个提交按钮
		
单个表单多个提交按钮 在某些情况下,可能需要为一个表单添加多个提交按钮.比如在创建文章的表单中添加发布按钮和存草稿的按钮.当用户提交表单时,需要在视图函数中根据按下的按钮来做出不同的处理. 下面例子中 ...
 - flask 处理表单数据
		
处理表单数据 表单数据的处理涉及很多内容,从获取数据到保存数据大致有以下步骤: 1. 解析请求,获取表单数据 2. 对数据进行必要的转换,比如讲勾选框的值转换成python的布尔值 3. 验证数 ...
 
随机推荐
- cmd中测试常用到的命令汇总
			
1.最常用的 ping +ip 2.测试到远程服务器之间是否通的命令 telnet +ip +端口 3.路由跟踪,通过跟踪可以找到到哪地方不通 tracert ip linux系统 tra ...
 - 【Python】装饰器 & 偏函数
			
[装饰器] 1.最简单的Decorator. def author(f): def addName(): print('My name is xkfx.\n') f() return addName ...
 - Swoole学习(一)了解一下Swoole的强大并在Centos安装Swoole及PHP扩展开启
			
Swoole是面向生产环境的 PHP 异步网络通信引擎,官网:https://www.swoole.com/ 使 PHP 开发人员可以编写高性能的异步并发 TCP.UDP.Unix Socket.HT ...
 - 20145327 《Java程序设计》第六周学习总结
			
20145327 <Java程序设计>第六周学习总结 教材学习内容总结 父类中的方法: 流(Stream)是对「输入输出」的抽象,而「输入输出」是相对程序而言的. 标准输入输出: Syst ...
 - 20144303 《Java程序设计》第二次实验实验报告
			
20144303 <Java程序设计>第二次实验实验报告 北京电子科技学院(besti)实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握U ...
 - STC51几种简单的延时函数
			
STC51几种简单的延时函数 ,* 延时子程序 * * * ********************************************************************** ...
 - easyui combobox 拼音检索快捷选择输入
			
easyui combobox 拼音检索快捷选择输入 效果如图 $.ajax({ url: UserActionUrl + '?action=listuserworktype', dataType ...
 - Class.forName()与newInstance()
			
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sq ...
 - Entity Framework教程及文章传送门
			
Entity Framework视频教程http://www.iqiyi.com/playlist296844502.html Model-Code First做法講解與教學 (ASP.net MVC ...
 - bootstrap系统学习
			
1.响应式中注意的内容: 一行(row)必须在.container中. col-xs- col-sm- col-md- col-lg- 列偏移 .col-md-offset-* 列排序 .col-md ...