发布于2019-12-07 22:52 阅读(1267) 评论(0) 点赞(28) 收藏(3)
WTForms 是一个使用 Python 编写的表单库, 它使得表单的定义、验证(服务器端) 和处理变得非常轻松。Flask-WTF 集成了 WTForms,使用它可以在 Flask 中更方便地使用 WTForms。Flask-WTF 集成了表单数据解析、CSRF保护、文件上传等功能。
pip install flask-wtf
Flask-WTF使用程序密钥来对CSRF令牌进行签名,所以需要为程序设置密钥:
app.secret key =’secret string’
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, Length
class LoginForm(FlaskForm):
username = StringField('Username', validators=[DataRequired()], render_kw={"placeholder":"hello"})
password = PasswordField('Password', validators=[DataRequired(), Length(8,128)])
submit = SubmitField('Login')
每个表单类必须继承自FlaskForm, 其中StringField等为表单中具体的字段,每个字段常用参数如下:
参 数 | 说 明 |
---|---|
label | 字段标签<label>的值,也就是渲染后显示在输入字段前的文字 |
render_kw | 一个字典,用来设置对应的 HTML <input> 标签的属性,比如传入{'placeholder' : 'Your Name'} ,渲染后的 HTML 代码会将 <input> 标签的 placeholder 属性设为 Your Name |
validators | 一个列表,包含一系列验证器,会在表单提交后被逐一调用验证表单数据 |
default | 字符串或可调用对象,用来为表单字段设置默认值 |
from forms import LoginForm
@app.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm()
# form.validate()用来验证用户输入的数据是否符合之前validators中给出的要求
# 也可用 form.validate_on_submit()代替下面的条件
if request.method == 'POST' and form.validate():
... # 处理POST请求
return render_template('login.html', form=form)
除了 POST 方法,如果请求的方法是 PUT、 PATCH 和 DELETE 方法, form.validate_on_ submit()也会验证表单数据。在这里不用带心会相应PUT方法,因为在methods中规定了只响应GET和POST方法。
<form method="post">
{{ form.csrf_token }} <!-- CSRF令牌隐藏字段 -->
{{ form.username.label }}
{{ form.username(class="form-control") }} <!--可传入关键字参数-->
{% for message in form.username.errors %} <!--服务器端验证后的错误信息-->
<small class="error">{{ message }} </small><br>
{% endfor %}
{{ form.password.label }}
{{ form.password(class="form-control", placeholder="hello") }}
{{ form.submit(class="btn btn-primary") }}
</form>
字段类 | 说明 | 对应的HTML表示 |
---|---|---|
BooleanField | 复选框,值会被处理为 True 或 False | <input type="checkbox"> |
DateField | 文本字段,值会被处理为 datetime.date 对象 | <input type="text"> |
DateTimeField | 文本字段,值会被处理为 datetime.datetime 对象 | <input type="text"> |
FileField | 文件上传字段 | <input type="file"> |
FloatField | 浮点数字段,值会被处理为浮点型 | <input type="text"> |
IntegerField | 整数字段,值会被处理为整型 | <input type="text"> |
RadioField | 一组单选按钮 | <input type="radio"> |
SelectField | 下拉列表 | <select><option></option></select> |
SelectMultipleField | 多选下拉列表 | <select multiple><option></option></select> |
SubmitField | 提交按钮 | <input type="submit"> |
StringField | 文本字段 | <input type="text"> |
HiddenField | 隐藏文本字段 | <input type="hidden"> |
PasswordField | 密码文本字段 | <input type="password"> |
TextAreaField | 多行文本字段 | <textarea></textarea> |
验证器 | 说 明 |
---|---|
DataRequired(message=None) | 验证数据是否有效 |
Email(message=None) | 验证 Email 地址 |
EqualTo(fieldname, message=None) | 验证两个字段值是否相同 |
InputRequired(message=None) | 验证是否有数据 |
Length(min=-1 , max=-l, message=None) | 验证输入值长度是否在给定范围内 |
NumberRange(min=None, max=None, message=None) | 验证输入数字是否在给定范围内 |
Optional(strip_whitespace=True) | 允许输入值为空 , 并跳过其他验证 |
Regexp(regex, flags=O, message=None) | 使用正则表达式验证输入值 |
URL(require_tld=True, message=None) | 验证 URL |
AnyOf(values, message=None, values_formatter=None) | 确保输入值在可选值列表中 |
NoneOf(values, message=None, values_formatter=None) | 确保输入值不在可选值列表中 |
在实例化验证类时, message参数用来传入自定义错误消息,如果没有设直则使用内置的英文错误消息
详见《Flask Web开发实战》
作者:jiem
链接:https://www.pythonheidong.com/blog/article/170253/33cb99a1859d79ccfc16/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!