flask_wtf快速入门

778 阅读2分钟

我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第2篇文章,点击查看活动详情

最近开始搞flask的表单,网上找到了这个东西。有一说一这个确实挺好用,但是感觉官方文档 有点不靠谱,这里我总结了一下flask_wtf如何快速入门和进行基本操作(注意:中横线和下划线区分清楚) 首先安装

pip install flask-wtf

然后在flask中初步import

from flask_wtf import FlaskForm
from wtforms import StringField
from wtforms.validators import DataRequired

下一步是创建表单(官方教程里面的)

class MyForm(FlaskForm):
    name = StringField('name', validators=[DataRequired()])

如果你看到是官方教程,里面的下一步是

<form method="POST" action="/">
    {{ form.csrf_token }}
    {{ form.name.label }} {{ form.name(size=20) }}
    <input type="submit" value="Go">
</form>

(submit.html↑)

然后在app.py中传参

@app.route('/submit', methods=['GET', 'POST'])
def submit():
    form = MyForm()
    if form.validate_on_submit():
        return redirect('/success')
    return render_template('submit.html', form=form)

此时你运行,会发现报错,说啥csrf token missing

欸~ 你猜怎么着?在官方教程添加submit.html前面,有一行In addition, a CSRF token hidden field is created automatically.

这就是说要添加CSRF密码/密钥,防止CSRF攻击(防止伪造请求之类的) 所以在

app = Flask(__name__)

后面添加

app.config["SECRET_KEY"] = "pwy"

(handsomepwy自己瞎填)

此时如果你提交,会报错504,也就是没有允许提交表单的POST方法,可是你明明添加了呀?

这是因为官方教程中form的action是 /,而不是submit

这里改好之后就OK了

下一步就是获取表单中参数的值了

if form.validate_on_submit():
    namename = form.name.data

此时namename变量就是你接收到表单的数据啦~

那么这次教程就结束了,希望能帮助到你,谢谢。 好像有点短,主要是我在搞一个flask_wtf的迷你实战,后面搞一篇大一点的,包括不同的input类型,如何接入html模板之类的,敬请期待