Flask之WTF和SQLAlchemy(4)

1 Flask WTF

Web应用程序的一个重要方面是为用户提供用户界面。HTML提供了一个标签,用于设计界面。可以适当地使用Form(表单)元素,例如文本输入,单选按钮,选择等。
用户输入的数据以Http请求消息的形式通过GET或POST方法提交给服务器端脚本。

  • 服务器端脚本必须从http请求数据重新创建表单元素。因此,实际上,表单元素必须定义两次 一次在HTML中,另一次在服务器端脚本中。
  • 使用HTML表单的另一个缺点是很难(如果不是不可能的话)动态呈现表单元素。HTML本身无法验证用户的输入。

在Flask中,为了处理web表单,我们一般使用Flask-WTF扩展,它封装了WTForms,使用Flask-WTF表单扩展,可以帮助进行CSRF验证,帮助我们快速定义表单模板,而且可以帮助我们在视图中验证表的数据。使用Flask-WTF,我们可以在Python脚本中定义表单字段,并使用HTML模板进行渲染。还可以将验证应用于WTF字段。

三方包安装:

pip install flask-WTF

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

字段名 说明
StringField 文本字段,表示 HTML表单元素
TextAreaField 多行文本字段
PasswordField 密码文本字段
HiddenField 隐藏文本字段
DateField 文本字段,值为datetime.date格式
DateTimeField 文本字段,值为datetime.datetime格式
IntegerField 文本字段,值为整数
DecimalField 文本字段,值为decimal.Decimal
FloatField 文本字段,值为浮点数
BooleanField 复选框,值为True和False。表示 HTML表单元素
RadioField 一组单选框
SelectField 下拉列表
SelectMultipleField 下拉列表,可选择多个值
FileField 文本上传字段
SubmitField 表单提交按钮 ,表示表单元素
FormField 把表单作为字段嵌入另一个表单
FieldList 一组指定类型的字段

WTForms常用验证函数

验证函数 说明
DataRequired 确保字段中有数据
Email 检查字段中的文本是否遵循电子邮件ID约定
IPAddress 在输入字段中验证IP地址
EqualTo 比较两个字段的值,常用于比较两次密码输入
Length 验证输入的字符串长度
NumberRange 验证输入的值在数字范围内
URL 验证URL
AnyOf 验证输入值在可选列表中
NoneOf 验证输入值不在可选列表中

注意
使用Flask-WTF需要配置参数SECRET_KEY。
CSRF_ENABLED是为了CSRF(跨站请求伪造)保护。 SECRET_KEY用来生成加密令牌,当CSRF激活的时候,该设置会根据设置的密匙生成加密令牌。

用法示例:

from flask_wtf import FlaskForm
from wtforms import StringField, TextAreaField, SubmitField, RadioField, IntegerField, SelectField
from wtforms import validators, ValidationError
from flask import Flask, render_template, request, flash

app = Flask(__name__)
app.secret_key = 'development key'

#定义表单模型
class ContactForm(FlaskForm):
   # label: 名字    validators:验证器/验证器
   name = StringField(label="名字", validators=[validators.DataRequired("输入名字")])
   gender = RadioField(label='性别', choices=[('M', 'Male'), ('F', 'Female')])
   address = TextAreaField(label="地址")
   email = StringField(label="邮箱", validators=[validators.DataRequired("输入邮件地址"),
                               validators.Email("输入邮件地址,必须满足格式**@**")])
   age = IntegerField(label="年龄")
   language = SelectField(label='语言', choices=[('cpp', 'C++'),
                                                (
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值