Flask表单
处理 web 表单,我们将使用 Flask-WTF扩展.
在 Flask-WTF 中,表单是表示成对象,Form 类的子类。一个表单子类简单地把表单的域定义成类的变量。
1. 配置Flask-WTF
Flaks-WTF 扩展只需要两个配置。
CSRF_ENABLED 配置是为了激活跨站点请求伪造保护。在大多数情况下,你需要激活该配置使得你的应用程序更安全些。
SECRET_KEY 配置仅仅当 CSRF 激活的时候才需要,它是用来建立一个加密的令牌,用于验证一个表单。当你编写自己的应用程序的时候,请务必设置很难被猜测到密钥。
2. 用户登录表单
创建一个登录表单,用户用于认证系统,我们导入 Form 类,接着导入两个我们需要的字段类,TextField 和 BooleanField。DataRequired 验证器只是简单地检查相应域提交的数据是否是空。在 Flask-WTF 中有许多的验证器.
3. 登录表单模板
重用base.html 模板通过 extends 模板继承声明语句,好处是以确保所有网页的布局一致性。
模板与常规的 HTML 表单之间存在一些不同处。模板期望一个实例化自我们刚才创建地表单类的表单对象储存成一个模板参数,称为 form。当我们编写渲染这个模板的视图函数的时候,我们将会特别注意传送这个模板参数到模板中。
form.hidden_tag() 模板参数将被替换为一个隐藏字段,用来是实现在配置中激活的 CSRF 保护.如果你已经激活了 CSRF,这个字段需要出现在你所有的表单中。
4. 表单视图
导入 LoginForm 类,从这个类实例化一个对象,接着把它传入到模板中。这就是我们渲染表单所有要做的。
注意:路由装饰器的 methods 参数。参数告诉 Flask 这个视图函数接受 GET 和 POST 请求。如果不带参数的话,视图只接受 GET 请求。
5. 接收表单数据
Flask-WTF 使得工作变得简单的另外一点就是处理提交的数据.form表单对象中validate_on_submit 方法做了所有表单处理工作
当表单正在展示给用户的时候调用它,它会返回 False.
如果 validate_on_submit 在表单提交请求中被调用,它将会收集所有的数据,对字段进行验证,如果所有的事情都通过的话,它将会返回 True,表示数据都是合法的。这就是说明数据是安全的,并且被应用程序给接受了。
如果至少一个字段验证失败的话,它将会返回 False,接着表单会重新呈现给用户,这也将给用户一次机会去修改错误。
6. 加强字段验证
加强字段验证是为了提示用户表单哪里出错了.当字段验证失败的时候, Flask-WTF 会向表单对象中添加描述性的错误信息。这些信息是可以在模板中使用的,因此我们只需要增加一些逻辑来获取它。
通常情况下,任何需要验证的字段都会把错误信息放入 form.field_name.errors 下。在我们的例子中,我们使用 form.openid.errors 。我们以红色的字体颜色显示这些错误信息以引起用户的注意。
7. 处理 OpenIDs
一些大的互联网服务提供商支持 OpenID 认证自己的会员。比如,如果你有一个 Google 的账号,你也就有了一个它们的 OpenID