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,提交按钮,提交表单给服务端。 (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐