使用WTF实现web表单
原创
©著作权归作者所有:来自51CTO博客作者亓官劼_的原创作品,请联系作者获取转载授权,否则将追究法律责任
使用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-WTF
在项目中导入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>