Flask 中使用 WTForms 进行表单验证

很多时候需要对浏览器提交的表单数据进行限制或验证,在 Flask 中使用 WTForms 拓展模块是一个很好的选择。

只需通过 pip 安装:pip install WTForms

表单类

定义一个简单的表单类:

1
2
3
4
5
6
7
8
from wtforms import Form, StringField, IntegerField
from wtforms.validators import Length, NumberRange, DataRequired


class SearchForm(Form):
q = StringField(validators=[DataRequired(), Length(min=1, max=30)])
# q = StringField(validators=[Length(min=1, max=30, message='')])
page = IntegerField(validators=[NumberRange(min=1, max=99)], default=1)

字段对象中的 validators 参数可以传入多个验证函数,验证函数中有个参数 message 用于自定义验证失败的错误提示。

视图函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from flask import jsonify, request
from . import SearchForm
...

@app.route('/book/search')
def search():
"""搜索书籍"""
form = SearchForm(request.args)
if form.validate():
q = form.q.data.strip()
page = form.page.data
# do something, result = ...
return jsonify(result)
return jsonify(form.errors)
  1. 视图函数中通过 request 获取参数传入到表单类中,表单类会对传入的表单数据,form.validate() 函数返回是否通过验证。
  2. 通过 form.<NAME>.data 可以获得表单中的单个值。
  3. 如果验证不通过,可以通过 form.errors 获取验证不通过的错误提示。
坚持原创技术分享,您的支持将鼓励我继续创作!