Flask-WTF:Flask 表单处理的得力工具
Flask 生态中一款老牌表单扩展 Flask-WTF,目前在 GitHub 收获了 1,507 个 Star:


Flask-WTF 是 Pallets 生态下的一个扩展,用于将 WTForms 集成到 Flask 应用中。它简化了表单定义、验证和渲染的流程,同时内置了 CSRF 保护、文件上传和 reCAPTCHA 等功能。
WTForms 本身是一个灵活的表单验证和渲染库,Flask-WTF 在此基础上做了与 Flask 框架的适配工作,让开发者可以在 Flask 项目中更便捷地使用表单功能。
核心功能
Flask-WTF 主要提供以下能力:
- CSRF 保护:内置跨站请求伪造防护,通过生成和校验 token 来保障表单提交安全
- 文件上传:集成 WTForms 的 FileField,处理文件上传和验证
- reCAPTCHA:支持 Google reCAPTCHA 的集成和验证
- 表单验证:继承 WTForms 完整的字段验证体系,包括必填、长度、邮箱格式等规则
安装使用
安装很简单,直接通过 pip:
pip install Flask-WTF
Flask-WTF 依赖 WTForms 和 Flask,安装时会自动处理依赖关系。
基本用法
在 Flask 应用中定义一个表单类:
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired
class MyForm(FlaskForm):
name = StringField('Name', validators=[DataRequired()])
submit = SubmitField('Submit')
在路由中处理表单:
from flask import Flask, render_template
from forms import MyForm
app = Flask(__name__)
app.config['SECRET_KEY'] = 'your-secret-key'
@app.route('/', methods=['GET', 'POST'])
def index():
form = MyForm()
if form.validate_on_submit():
# 处理提交的数据
return f'Hello, {form.name.data}!'
return render_template('index.html', form=form)
模板中渲染表单:
<form method="POST">
{{ form.hidden_tag() }}
{{ form.name.label }} {{ form.name() }}
{{ form.submit() }}
</form>
hidden_tag() 方法会自动渲染 CSRF token 字段,这是安全防护的关键部分。
文件上传示例
Flask-WTF 处理文件上传同样直接:
from flask_wtf import FlaskForm
from flask_wtf.file import FileField, FileAllowed
class UploadForm(FlaskForm):
photo = FileField('Image', validators=[
FileAllowed(['jpg', 'png'], 'Images only!')
])
submit = SubmitField('Upload')
项目背景
Flask-WTF 属于 Pallets-Eco 组织维护的扩展之一。该组织负责 Flask 核心及一系列官方扩展的维护工作。项目文档托管在 Read the Docs 上,PyPI 发布版本保持常规更新。
对于需要在 Flask 项目中处理表单的开发者,Flask-WTF 提供了一套开箱即用的方案,省去了手动集成 WTForms 和配置 CSRF 保护的步骤。
I 发布版本保持常规更新。
对于需要在 Flask 项目中处理表单的开发者,Flask-WTF 提供了一套开箱即用的方案,省去了手动集成 WTForms 和配置 CSRF 保护的步骤。
1295

被折叠的 条评论
为什么被折叠?



