美文网首页
Flask表单-WTF

Flask表单-WTF

作者: 猴子精h | 来源:发表于2017-08-31 13:39 被阅读610次

Flask-WTF 提供了对 WTForms 的集成, 从 0.9.0 版本开始,Flask-WTF 不再从 WTforms 中导入任何东西,你需要从 WTForms 导入字段。表单字段的定义需要去WTForms中参考:http://wtforms.readthedocs.io/en/latest/

默认情况下,Flask-WTF为避免CSRF攻击,需要程序设置一个密钥。

app = Flask(__name__)
app.config['SECRET_KEY'] = 'xcxxxx'

定义表达类:使用Flask-WTF,每个表达都由一个继承Form的类表示

from flask_wtf import Form
from wtforms import TextField, SubmitField
from wtforms.validators import DataRequired

class MyForm(Form):
    name = StringField('name', validators=[DataRequired()])
    submit = SubmitField('Submit')

模版中渲染

<form method="POST" action="/">
    {{ form.csrf_token }}
    {{ form.name.label }} {{ form.name(size=20) }}
</form>

或配合flaks-bootstarp直接生成

{% import "bootstarp/wtf.html" as  wtf%}

{{ wtf.quick_form(form) }}

视图中验证表达

@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)

上传文件

定义表单类

from flask_wtf.file import FileField, FileAllowed, FileRequired

class MyForm(Form):
    name = StringField('name', validators=[DataRequired()])
    photo = FileField('Your photo', validators=[FileRequired(), FileAllowed(['jpg', 'png'], 'Image Only')])
    submit = SubmitField('Submit')

试图函数中处理

from flask import request
from werkzeug.utils import secure_filename

@main.route('/myform', methods=['GET', 'POST'])
def myform():
    form = MyForm()
    if form.validate_on_submit():
        uploadFile = request.files['photo']  # 获取上传文件句柄
        uploadFile.save('/tmp/%s' %secure_filename(uploadFile.filename)) # secure_filenamed检测并过滤用户的输入
        return redirect('/')
    return render_template('myform.html', form=form)

模版中注意

注解
请记得设置 HTML 表单的 enctype 为 multipart/form-data , 即:

<form action="/upload/" method="POST" enctype="multipart/form-data">
    ....
</form>

wtforms SelectField 动态添加option项

很多情况下我们使用<select>表单的时候会动态从数据库中加载值, 修改实例化form类对象的属性;

例如:在用户注册页面可能需要选择角色

Form类

class AddUserForm(Form):
    name = StringField('Username', validators=[DataRequired()])
    role_id = SelectField('role', choices=[], coerce=int)
    submit = SubmitField(u'提交')

Views

form = AddUserForm()
form.role_id.choices += [(r.id, r.name) for r in  Role.query.order_by('name').all() ]

相关文章

  • 4. 表单

    4.1 HTML表单 先看一个简单的HTML表单 4.2 使用Flask-wtf处理表单 Flask-wtf默认为...

  • Flask Web笔记(四)- 表单

    Web 表单 处理web表单的扩展 Flask-WTF 跨域请求伪造保护(CSRF) Flask-WTF 能保护所...

  • Python day43_Flask入门

    使用 Flask-WTF 实现表单 导入wtf扩展的表单类,导入自定义表单需要的字段,导入wtf扩展提供的表单验证...

  • Flask Web 开发 Chapter4 - Web 表单

    处理Web表单的扩展 Flask-WTF Flask-wtf 对WTForms包进行了包装,方便集成入Flask框...

  • Flask表单

    表单 flask-wtf 的使用 1.跨站请求伪造保护 Flask-WTF 能保护所有表单免受跨站请求伪造(Cr...

  • Flask学习日志(十) - Flask入门 表单

    文 / 秦未 今天学习Flask的表单处理,我们需要一个插件:flask-wtf Flask-WTF 提供了简单的...

  • 2018-07-12

    flask 添加表单 1.安装Flask-WTF 及其依赖 (venv) $ pip install flask-...

  • 《Flask Web开发实战》—— 表单

    Flask关于表单处理的部分,使用Flask-WTF库,首先安装 1. 表单的基本处理 Flask中表单的基本处理...

  • Flask Web表单验证

    Flask Web表单验证 一、开发准备: 1、安装Flask-WTF扩展: pip install flask-...

  • Flask Wtf

    Flask Wtf是一个flask的表单插件,主要提供表单后台验证功能并自动为表单附加crsf_token的功能,...

网友评论

      本文标题:Flask表单-WTF

      本文链接:https://www.haomeiwen.com/subject/oydqjxtx.html