加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Flask 的表单验证器

发布时间:2023-06-30 14:27:45 所属栏目:教程 来源:
导读:在 Web 页面中,表单是一种常见的元素,表单包含有多个字段,通常字段的取值需要在一定的范围内,例如:QQ 注册时,名称不可以为空,密码的长度至少是 8 个字符。

将表单提交给服务端处理时,服务端需要验证表单中
在 Web 页面中,表单是一种常见的元素,表单包含有多个字段,通常字段的取值需要在一定的范围内,例如:QQ 注册时,名称不可以为空,密码的长度至少是 8 个字符。

将表单提交给服务端处理时,服务端需要验证表单中的字段的取值是否符合要求。本节学习 Flask 中提供表单验证的功能,学习如何对表单中的字段的取值进行有效性检查。

1. 表单验证器
1.1 WTForms 和 Flask-WTF
在 Python 的 Web 开发中,WTForms 是一个灵活的表单验证和表单渲染的库,它的主要功能:
验证表单中的字段的取值是否符合要求;
渲染输出表单的 HTML 代码。
WTForms 可以与任意的 Web 框架和模板引擎一起使用。 在 Flask 框架或者 Django 框架中,都可以使用 WTForms。
Flask-WTF 在 WTForms 的基础上提供了一些扩展,可以方便的在 Flask 框架中生成表单。

1.2 表单字段
WTForms 支持如下类型的表单字段:
字段类型    说明
StringField    文本字段
TextAreaField    多行文本字段
PasswordField    密码文本字段
HiddenField    隐藏文本字段
DateField    文本字段,值为datetime.date格式
IntegerField    文本字段,值为整数
DecimalField    文本字段, 值为decimal.Decimal
FloatField    文本字段,值为浮点数
BooleanField    复选框, 值为True 和 False
RadioField    一组单选框
SelectField    下拉列表
FileField    文件上传字段
SubmitField    表单提交按钮

1.3 验证器
WTForms 支持如下类型的表单验证:
验证类型    说明
Email    验证电子邮件地址
EqualTo    比较两个字段的值;常用于要求输入两次秘钥进行确认的情况
Length    验证输入字符串的长度
NumberRange    验证输入的值在数字范围内
Daterequired    确保字段中有数据

2. 程序功能和结构
2.1 程序功能
在下面的小节,我们将使用 WTForms 实现一个登录程序,表单中包含有如下字段:
表单字段    说明
邮件地址    要求符合邮件地址的格式,如 user@qq.com
密码    要求密码至少包括 6 个字符
提交    将表单提交给服务器
用户输入邮件地址为 ‘tom’、密码为 ‘123’,点击登录按钮将表单提交给服务器,服务器进行表单验证:
验证邮件地址是否规范,并显示验证失败的信息——“请输入正确的邮箱” ;
验证密码的长度,并显示验证失败的信息——“密码至少包括 6 个字符”。

2.2 程序结构
例子包括 2 个源文件,如下表所示:
程序    说明
app.py    Flask 后端程序,实现表单验证
templates/login.html    登录界面的模板

3. Flask 程序 app.py
3.1 安装库
使用如下命令安装相关的库:
$ pip3 install wtforms
$ pip3 install flask-wtf
$ pip3 install email-validator

3.2 引入库
#!/usr/bin/python3
from flask import Flask, render_template, request
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField, PasswordField
from wtforms.validators import Datarequired, Length, Email, ValidationError
app = Flask(__name__)
app.config['SECRET_KEY'] = 'hard to guess string'
在这个程序中,引入如下类:
类    来自于模块    功能
FlaskForm    flask_wtf    登录表单的基类
StringField    wtforms    文本字段
PasswordField    wtforms    密码文本字段
SubmitField    wtforms    表单提交按钮
Daterequired    wtforms    确保字段中有数据
Length    wtforms    验证输入字符串的长度
Email    wtforms    验证电子邮件地址的格式是否正确
ValidationError    wtforms    验证失败时,抛出此异常
在第 8 行,配置 Flask 应用的选项 ‘SECRET_KEY’ 用于防范 CSRF 攻击,请参考 CSRF 攻击的相关词条。

3.3 定义登录表单
class LoginForm(FlaskForm):
    email = StringField(
        label = '邮箱',
        validators = [
            Datarequired(message = '邮箱不能为空'),
            Email(message = '请输入正确的邮箱')
        ]
    )
    password = PasswordField(
        label = '密码',
        validators =[
            Datarequired(message = '密码不能为空'),
            Length(min = , message = '密码至少包括 6 个字符')
        ]
    )
    submit = SubmitField('登录')
定义类 LoginForm,它继承于 FlaskForm,用于描述登录界面,登录界面是一个表单,包含有 3 个字段:

email,显示 label 为 ‘邮箱’,包括 2 个验证器:Datarequired 和 Email,message 参数为验证失败的提示信息;
password,显示 label 为 ‘密码’,包括 2 个验证器:Datarequired 和 Length,message 参数为验证失败的提示信息,min = 6 表示密码的最小长度;
submit,提交按钮,提交表单给服务端。
 

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章