使用WTF实现web表单

WTForms支持的HTML标准字段

字段类型

说明

BooleanField

复选框,值为True和False

DateField

文本字段,值为datetime.date格式

DareTimeField

文本字段,值为datetime.datetime格式

FileField

文件上传字段

HiddenField

隐藏的文本字段

MultipleFileField

多文本上传字段

FieldList

一组指定类型的字段

FloatField

文本字段,值为浮点数

FormField

把一个表单作为字段嵌入另一个表单

IntegerField

文本字段,值为整数

PasswordField

密码文本字段

RadioField

一组单选按钮

SelectField

下拉列表

SelectMultipleField

下拉列表,可选择多个值

SubmitField

表单提交按钮

StringField

文本字段

TextAreaField

多行文本字段

WTForms验证函数

验证函数

说明

DateRequired

确保转换类型后字段中有数据

Email

验证电子邮件地址

EqualTo

比较两个字段的值,常用于要求输入两次密码进行确认的时候

InputRequired

确保转换类型前字段中有数据

IPAddress

验证IPv4网络地址

Length

验证输入字符串的长度

MacAddress

验证MAC地址

NumberRange

验证输入的值在数字范围之内

Optional

允许字段中没有输入,将跳过其他验证函数

Regexp

使用正则表达式验证输入值

URL

验证URL

UUID

验证UUID

AnyOf

确保输入值在一组可能的值中

NoneOf

确保输入值不在一组可能的值中

Flask-WTF扩展的安装

参考我的另一个博客​​Flask-WFT安装​

在项目中导入Flask-WTF

from flask_wtf import

在项目中导入Flaks-WTF的HTML标准字段

from wtforms import StringField,PasswordField,SubmitField

在项目中导入Flask-WTF的验证函数

from wtforms.validators import DataRequired,

在使用Flask-WTF拓展的时候,需要使用CSRF Token
在html页面中加入

{{ html_form.csrf_token() }}

使用Flask-WTF创建表单示例

​app.py​

from flask import Flask, render_template, request, flash
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, EqualTo

app = Flask(__name__)

app.secret_key = "dsauhfabf"


class LoginForm(FlaskForm):
username = StringField('用户名', validators=[DataRequired()])
password1 = PasswordField('密码', validators=[DataRequired()])
password2 = PasswordField('确认密码', validators=[DataRequired(), EqualTo('password1', "两次密码填入不一致")])
submit = SubmitField('提交')


@app.route('/form', methods=['GET', 'POST'])
def login():
login_form = LoginForm()
if request.method == 'POST':
username = request.form.get('username')
password1 = request.form.get('password1')
password2 = request.form.get('password2')
if login_form.validate_on_submit():
return 'success'
else:
flash("false")

return render_template('demo3.html', html_form=login_form)


if __name__ == '__main__':
app.run()

demo3.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form method="post">
<br>
{{ html_form.csrf_token() }}
{{ html_form.username.label }}{{ html_form.username }}<br>
{{ html_form.password1.label }}{{ html_form.password1 }}<br>
{{ html_form.password2.label }}{{ html_form.password2 }}<br>
{{ html_form.submit }}<br>

{% for message in get_flashed_messages() %}
{{ message }}
{% endfor %}
</form>
</body>
</html>