flask成长记(三)

flask成长记(三)web表单前面介绍的请求对象包含客户端发出的所有请求信息。其中, request.form 能获取 POST 请求中提交的表单数据。尽管 Flask 的请求对象提供的信息足够用于处理 Web 表单,但有些任务很单调,而且要重 复操作。比如,生成表单的 HTML 代码和验证提交的表单数据。这上面说啥?Flask-WTF( http://pythonhosted.org/Fla
摘要由CSDN通过智能技术生成

flask成长记(三)

web表单

前面介绍的请求对象包含客户端发出的所有请求信息。其中, request.form 能获取
POST 请求中提交的表单数据。

尽管 Flask 的请求对象提供的信息足够用于处理 Web 表单,但有些任务很单调,而且要重
复操作。比如,生成表单的 HTML 代码和验证提交的表单数据。

这上面说啥?

Flask-WTF( http://pythonhosted.org/Flask-WTF/) 扩展可以把处理 Web 表单的过程变成一
种愉悦的体验。 这个扩展对独立的 WTForms( http://wtforms.simplecodes.com)包进行了包
装,方便集成到 Flask 程序中。

Flask-WTF 及其依赖可使用 pip 安装:

pip install flask-wtf

跨站请求伪造保护

其实蜗牛刚看到也是黑人问号脸……

默认情况下, Flask-WTF 能保护所有表单免受跨站请求伪造( Cross-Site Request Forgery,
CSRF)的攻击。恶意网站把请求发送到被攻击者已登录的其他网站时就会引发 CSRF 攻击。

没错,这个CSRF就是跨站请求伪造。

为了实现 CSRF 保护, Flask-WTF 需要程序设置一个密钥。 Flask-WTF 使用这个密钥生成
加密令牌,再用令牌验证请求中表单数据的真伪。设置密钥的方法如下:

hello.py: 设置 Flask-WTF

app = Flask(__name__)
app.config['SECRET_KEY'] = 'hard to guess string'

app.config** 字典**可用来存储框架、扩展和程序本身的配置变量。使用标准的字典句法就能
把配置值添加到 app.config 对象中。这个对象还提供了一些方法,可以从文件或环境中导
入配置值。

SECRET_KEY 配置变量是通用密钥,可在 Flask 和多个第三方扩展中使用。如其名所示,加
密的强度取决于变量值的机密程度。 不同的程序要使用不同的密钥,而且要保证其他人不
知道你所用的字符串。

表单类

使用 Flask-WTF 时,每个 Web 表单都由一个继承自 Form 的表示。这个类定义表单中的
一组字段,每个字段都用对象表示。字段对象可附属一个或多个验证函数。验证函数用来
验证用户提交的输入值是否符合要求。

下面是一个简单的 Web 表单,包含一个文本字段和一个提交按钮。

hello.py: 定义表单类
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')

来来来,我们回味一下。
上边儿说了,每个 Web 表单都由一个继承自 Form 的类表示。

class NameForm(Form):这个就是python中的类继承机制。Form就是那个无私的被继承的类。

那这个类啥时候被实例化呢?

剩下的name和submit是对象。

你还有没有想过,你现在是在python函数中定义了一个class而已啊,里面的按钮啥的都是对象。
但是最后你是要渲染成HTML标签的啊!

那它和HTML怎么对应?
在这个示例中,
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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值