Mr.Tcsy's blog Mr.Tcsy's blog

Python Flask 表单处理

in Python read (51) 文章转载请注明来源!

定义表单类

from flask.ext.wtf import Form
from wtforms import StringField, SubmitField
from wtforms.validators import Required

class NameForm(Form):
        name = StringField('What is your name?', validators=[Required()])
submit = SubmitField('Submit')

这个表单中的字段都定义为类变量,类变量的值是相应字段类型的对象。在这个示例中,NameForm 表单中有一个名为 name 的文本字段和一个名为 submit 的提交按钮。 StringField类表示属性为 type="text" 的 <input> 元素。 SubmitField 类表示属性为 type="submit" 的<input> 元素。字段构造函数的第一个参数是把表单渲染成 HTML 时使用的标号。StringField 构造函数中的可选参数 validators 指定一个由验证函数组成的列表,在接受用户提交的数据之前验证数据。验证函数 Required() 确保提交的字段不为空。

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 内建的验证函数如表 4-2 所示。

WTForms验证函数

Email 验证电子邮件地址
EqualTo 比较两个字段的值;常用于要求输入两次密码进行确认的情况
IPAddress 验证 IPv4 网络地址
Length 验证输入字符串的长度
NumberRange 验证输入的值在数字范围内
Optional 无输入值时跳过其他验证函数
Required 确保字段中有数据
Regexp 使用正则表达式验证输入值
URL 验证 URL
AnyOf 确保输入值在可选值列表中
NoneOf 确保输入值不在可选值列表中

实例:

@app.route('/', methods=['GET', 'POST'])
def index():
    name = None
    form = NameForm()
    if form.validate_on_submit():
        name = form.name.data
        form.name.data = ''
    return render_template('index.html', form=form, name=name)

methods 定义请求方式。
局部变量name用来存储form表单中提交的数据,如果没有输入则值为None。

用户第一次访问程序时, 服务器会收到一个没有表单数据的 GET 请求,所以 validate_on_
submit() 将返回 False。 if 语句的内容将被跳过,通过渲染模板处理请求,并传入表单对
象和值为 None 的 name 变量作为参数。用户会看到浏览器中显示了一个表单。
用户提交表单后, 服务器收到一个包含数据的 POST 请求。 validate_on_submit() 会调用
name 字段上附属的 Required() 验证函数。如果名字不为空,就能通过验证, validate_on_
submit() 返回 True。现在,用户输入的名字可通过字段的 data 属性获取。在 if 语句中,
把名字赋值给局部变量 name,然后再把 data 属性设为空字符串,从而清空表单字段。最
后一行调用 render_template() 函数渲染模板,但这一次参数 name 的值为表单中输入的名
字,因此会显示一个针对该用户的欢迎消息。

渲染模板:

<h1>Hello, {% if name %}{{ name }}{% else %}HAHAHAHA{% endif %}!</h1>
    <form method="POST">
{{ form.hidden_tag() }}
{{ form.name.labfel }} {{ form.name() }}
{{ form.submit() }}
    </form>

本文基于《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权
文章链接:https://secsb.com/archives/34/ (转载时请注明本文出处及文章链接)

Python
发表新评论
博客已萌萌哒运行
© 2018 由 Typecho 强力驱动.Theme by YoDu 冀ICP备17018029号-1
PREVIOUS NEXT
雷姆
拉姆