学习Flask之四、网页表单

第二章介绍的request对象,使用了客户端请求的所有信息。特别地,request.form提供了对POST请求提交的表单数据的访问。尽管Flask请求对象的支持足于处理网页单,但是还有很多作务很繁锁和重复。两个很好的例子是产生HTML表单代码和验证表单数据。

Flask-WTF扩展处理表单的体验更让人愉快。这个扩展是WTForms的 Flask集成。Flask-WTF和它的依赖可以通过pip安装:

(venv) $ pip install flask-wtf

Cross-Site Request Forgery (CSRF) 保护

黙认情况下, Flask-WTF保护所有的表单免受Cross-Site Request Forgery (CSRF)攻击。当恶意网站发送请求到攻击者登入的不同的网站时会出现CSRF攻击。

要实施 CSRF保护,Flask-WTF要求应用配置密钥。Flask-WTF用这个密钥产生加密标签来证实表单数据请求是授权的。

Example 4-1展示如何配置密钥

Example 4-1. hello.py: Flask-WTF configuration

app = Flask(__name__)

app.config['SECRET_KEY'] = 'hard to guess string'

app.config字典是框架、扩展或应用本身存贮配置信息的通用地方。配置值可以通过标准的字典符号添加到app.config。configuration对象也有函数从环境或文件中导入配置值。

SECRET_KEY配置变量被Flask和其它扩展用作通用密钥。如它的名字所示,加密的强度取决于变量的值。在不同的应用中使用不同的密钥并确保这个字符串不被别人知道。为了增强安全性,密钥应贮存于环境变量中而不是被嵌入到代码中。这个技术描述于第7章。

Form类

Flask-WTF时,每一个网页表单由一个类来呈现它继承自Form类。这个类定义了表单中字段的列表,每个字段呈现为一个对象。每个字段对象可以附着一个或多个验证器。验证器是检查用户输入的函数。

Example 4-2 展示一个简单的表单,它有一个文本字段和一个提交字段。

Example 4-2. 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')

表单中的字段以类的变量定义,每个类的变量赋一个相关的对象具有一个类型。前面的例子里,NameForm表单有一个文本字段称为name以及一个提交按钮。StringField类呈现为元素具有type="text"的属性。SubmitField类呈现元素具有 type="submit"属性。field构造函数的第一个参数是宣染表单时的label。

StringField 构造器中包含的可选的验证器参数定义了检查器的列表,它们在接受前作用于用户提交的数据。Required()验证器确保提效的字段非空。表单的基类被Flask-WTF 扩展定义,所以它导入自flask_wtf。但是字段和验证器自接从WTForms包导入。

WTForms支持的标准的HTML字段列表见Table 4-1.见:

http://www.aluoyun.cn/details.php?article_id=1

你可能感兴趣的:(flask,学习,python,WTForms,flask-wtf)