Flask 入门8:Web 表单

Flask 入门8:Web 表单

flask-WTF 扩展可以把处理 Web 表单,这个扩展对独立的
WTForms 包进行了包装,方便集成到Flask应用中。

1. 配置

与其他多数扩展不同,Flask-WTF 无须在应用层初始化,但是它要求应用配置一个密钥。密钥是一个由随机字符构成的唯一字符串,通过加密或签名以不同的方式提升应用的安全性。Flask 使用这个密钥保护用户会话,以防被篡改。

配置 Flask-WTF:

python">app = Flask(_name_)
app.config['SECRET_KEY'] = 'hard to guess string'

2. 表单类

使用 Flask-WTF 时,在服务器端,每个 Web 表单都由一个继承自 FlaskForm 的类表示。这个类定义表单中的一个字段,每个字段都用对象表示。字段对象可附属一个或多个验证函数。
验证函数用于验证用户提交的数据是否有效。

定义表单类:

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

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

验证函数 DataRequired() 确保提交的字段内容不为空。

WTForms支持的HTML标准字段:

字段类型 说明
BooleanField 复选框,值为 True 和 False
DateField 文本字段,值为 datetime.data 格式
DateTimeField 文本字段,值为 datetime.datetime 格式
DecimalField 文本字段,值为 decimal.Decimal
FileField 文件上传字段
HiddenField 隐藏的文本字段
MultipleField 多文件上传字段
FieldList 一组指定类型的字段
FloatField 文本字段,值为浮点数
FormField 把一个表单作为字段嵌入另一个表单
IntegerField 文本字段,值为整数
PasswordField 密码文本字段
RadioField 一组单选按钮
SelectField 下拉列表
SelectMultipleField 下拉列表,可选择多个值
SubmitField 表单提交按钮
StringField 文本字段
TextAreaField 多行文本字段

WTForms验证函数:

验证函数 说明
DataRequired 确保转换类型后字段中有数据
Email 验证电子邮件地址
EqulTo 比较两个字段的值;常用于要求输入两次密码进行确认的情况
InputRequired 确保转换类型前字段中有数据
IPAddress 验证 IPv4 网络地址
Length 验证输入字符串的长度
MacAddress 验证 MAC 地址
NumberRange 验证输入的值在数字范围之内
Optional 允许字段中没有输入,将跳过其他验证函数
Regexp 使用正则表达式验证输入值
URL 验证 URL
UUID 验证 UUID
AnyOf 确保输入值在一组可能的值中
NoneOf 确保输入值不在一组可能的值中

3. 在视图函数中处理表单

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

app.route 装饰器中多出的methods 参数告诉Flask,在URL映射中把这个视图函数注册为GET 和POST 请求的处理程序。如果没指定methods参数,则只把视图函数注册为GET请求的处理程序。
这里有必要把POST加入方法列表,因为更常使用POST请求处理表单提交。表单也可以通过GET 请求提交,但是GET请求没有主体,提交的数据以查询字符串的形式附加到URL中,在浏览器的地址栏中可见。基于这个以及其他多个原因,处理表单提交几乎都使用POST请求。

index.html:

示例4-3 templates/index.html:使用 Flask-WTF 和 Flask-Bootstrap 渲染表单
{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}
{% block title %}Flasky{% endblock %}
{% block page_content %}
<div class="page-header">
    <h1>Hello, {% if name %}{{ name }}{% else %}Stranger{% endif %}!</h1>
</div>
{{ wtf.quick_form(form) }}

<div class="container">

</div>
<div class="container">
    <p>The local date and time is {{ moment(current_time).format('LLL') }}.</p>
<p>That was {{ moment(current_time).fromNow(refresh=True) }}</p>
</div>
{% endblock %}



转载请说明出处内容投诉
CSS教程_站长资源网 » Flask 入门8:Web 表单

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买