有时候我们经常会跟前端提交的表单数据打交道,每次手写验证规则真的很繁琐。Flask-WTF扩展模块提供了前端表单自动生成和前端表单提交数据验证的功能。
WTForms支持的HTML标准字段
字段对象 | 说明 |
---|---|
StringField | 文本字段 |
TextAreaField | 多行文本字段 |
PasswordField | 密码文本字段 |
HiddenField | 隐藏文本字段 |
DateField | 文本字段,值为datetime.date格式 |
DateTimeField | 文本字段,值为datetime.datetime格式 |
IntegerField | 文本字段,值为整数 |
DecimalField | 文本字段,值为decimal.Decimal |
FloatField | 文本字段,值为浮点数 |
BooleanField | 复选框,值为True和False |
RadioField | 一组单选框 |
SelectField | 下拉列表 |
SelectMultipleField | 下拉列表,可选择多个值 |
FileField | 文本上传字段 |
SubmitField | 表单提交按钮 |
FormField | 把表单作为字段嵌入另一个表单 |
FieldList | 一组指定类型的字段 |
WTForms常用验证函数
验证函数 | 说明 |
---|---|
DataRequired | 确保字段中有数据 |
EqualTo | 比较两个字段的值,常用于比较两次密码输入 |
Length | 验证输入的字符串长度 |
NumberRange | 验证输入的值在数字范围内 |
URL | 验证URL |
AnyOf | 验证输入值在可选列表中 |
NoneOf | 验证输入值不在可选列表中 |
register.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<!DOCTYPE html>
<
html
>
<
head
>
<
meta
charset
=
"UTF-8"
>
<
title
>Register</
title
>
</
head
>
<
body
>
<
form
method
=
"post"
>
<
div
>用户名:<
input
type
=
"text"
name
=
"username"
></
div
>
<
div
>邮 箱:<
input
type
=
"text"
name
=
"email"
></
div
>
<
div
>密 码:<
input
type
=
"password"
name
=
"password1"
></
div
>
<
div
>再次输入:<
input
type
=
"password"
name
=
"password1"
></
div
>
<
div
><
input
type
=
"submit"
value
=
"Submit"
></
div
>
</
form
>
</
body
>
</
html
>
|
flask.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
# coding=utf-8
from
flask
import
Flask, render_template, request
from
wtforms
import
Form, StringField, PasswordField, validators
app
=
Flask(__name__)
class
UserRegisterForm(Form):
"""用户注册表单验证"""
username
=
StringField([validators.Length(
min
=
4
,
max
=
10
), validators.DataRequired()])
email
=
StringField([validators.DataRequired()])
password1
=
PasswordField([validators.DataRequired(), validators.EqualTo(
"password2"
)])
password2
=
PasswordField([validators.DataRequired()])
@app
.route(
'/user/register/'
, methods
=
[
"GET"
,
"POST"
])
def
user_register():
form
=
UserRegisterForm(request.form)
if
request.method
=
=
"POST"
and
form.validate():
print
(form.username.data)
print
(form.email.data)
print
(form.password1.data)
print
(form.password2.data)
return
"Thank you for your register!"
return
render_template(
"register.html"
)
if
__name__
=
=
'__main__'
:
app.run()
|
这里前端的表单是我们自己通过前端标签手写的,我在后端定义了UserRegisterForm类,将类实例化把request.form作为参数传入实例中,validate()方法验证数据格式是否正确,返回True或False。Flask中的WTForms跟Django中的Form功能一样!
本文转自戴柏阳的博客博客51CTO博客,原文链接http://blog.51cto.com/daibaiyang119/2046253如需转载请自行联系原作者
daibaiyang119