在登录网站或者注册时我们总会遇到表单,在Flask中我们可以用Flask-WTF来把处理表单问题。Flask-WTF能保证所有的表单免受跨站请求伪造(CSRF)的攻击。恶意网站把请求发送到被攻击者已登录的其他网站时就会引发CSRF攻击(利用的是网站对浏览器用户的信任。)为了保护CSRF保护,Flask-WTF需要程序设置一个密钥,Flask-WTF使用这个密钥生成加密令牌,再用令牌验证请求中表单数据的真伪。在Flask中app.config字典可以用来存储框架,扩展和程序本身的配置变量,使用标准的字典句法就可以把配置添加到app.config对象中。这个对象还提供了一些方法,可以从文件或环境中导入配置值。
SECRET_KEY配置变量是通用密钥,可在Flask和多个第三方扩展中使用。不同的程序需要使用不同的密钥,而且要保证其他人不知道你所用的字符串。同时,为了增强安全性,密钥不应该主接写入代码应该保存在环境变量中。
使用Flask_wtf 极其简单
WTForms支持的HTML标准字段:
字段类型 | 说 明 |
---|---|
StringField | 文本字段 |
TextAreaField | 多行文本字段 |
PasswordField | 密码文本字段 |
HiddenField | 隐藏文本字段 |
DateField | 文本字段,值为datetime.date格式 |
DateTimeField | 文本字段,值为datetime.datetime格式 |
IntegerField | 文本字段,值为整数 |
DecimalField | 文本字段,值为decimal.Decimal |
FloatFiled | 文本字段,值为浮点数 |
BooleanField | 复选框,值为True和False |
RadioField | 一组单选框 |
SelectField | 下拉列表 |
SelectMultipleField | 下拉列表,可选择多个值 |
FileField | 文件上传字段 |
SubmitField | 表单提交按钮 |
FormField | 把表单作为字段嵌入另一表单 |
FieldList | 一组指定类型的字段 |
WTForms验证函数:
验证函数 | 说 明 |
---|---|
验证电子邮件地址 | |
EqualTo | 比较两个字段的值,常用于要求输入两次密码确认的情况 |
IPAddress | 验证IPv4网络地址 |
Length | 验证输入字符串的长度 |
NumberRange | 验证输入的值在数字范围内 |
Optional | 无输入值时跳过其他验证函数 |
Required | 确保字段中有数据 |
Regexp | 使用正则表达式验证输入值 |
URL | 验证URL |
AngOf | 确保输入值在可选值列表中 |
NoneOf | 确保输入值之不在可选值列表中 |
from flask_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')
把表单渲染成HTML
利用Bootstrap中预定义好的表单样式渲染整个Flask_WTF表单,是极其方便的,只要将Bootstrap中预定义好的wtf.html导入。然后将将表单传递给quick_from()函数
{% import 'bootstrap/wtf.html" as wtf %}
{{wtf.quick_from(form)}}