html flask表单验证码,使用Python的Flask框架表单插件Flask-WTF实现Web登录验证.pdf

使使用用Python的的Flask框框架架表表单单插插件件Flask-WTF实实现现Web登登录录验验证证

Flask处理表单除了本身的WTForms包,使用Flask-WTF扩展来增强表单功能也是很多开发者的选择,这里我们就来讲

解如何使用Python的Flask框架表单插件Flask-WTF实现Web 录验证

表单是让用户与我们的网页应用程序交互的基本元素。Flask 本身并不会帮助我们处理表单,但是 Flask-WTF 扩展让

我们在我们的 Flask 应用程序中使用流行的 WTForms 包。这个包使得定义表单和处理提交容易一些。

Flask-WTF

我们想要使用 Flask-WTF 做的第一件事情 (在安装它以后,GitHub项目页 :/lepture/flask- tf )

就是在 myapp.forms 包中定义一个表单。

# ourapp/forms.py

from flask_wtf import Form

from wtforms import StringField, PasswordField

from wtforms.validators import DataRequired, mail

class mailPasswordForm(Form):

email = StringField(' mail', validators=[DataRequired(), mail()])

password = PasswordField('Password', validators=[DataRequired()])

在 Flask-WTF 0.9 版本以前,Flask-WTF 提供了针对 WTForms 字段以及验证器的自己的封装。你可能看到外面一大

堆的代码是从 flask.ext. tforms 中不是从 tforms 中导入 TextField,Pass ordField。

在 Flask-WTF 0.9 版本以后,我们应该直接从 tforms 中导入这些字段和验证器。

我们定义的表单是一个用户 录表单。我们把它叫做 EmailPass ordForm(),我们可以重用这个同样的表单类 (Form

)去做其它的一些事情,像注册表单。这里我们没有去定义一个又长又没有用的表单,而是选择一个很常用的表单,

只是为了给你们介 使用 Flask-WTF 定义表单的方式。也许以后在正式项目中会定义一个特别复杂表单。对于表单中

包含字段名称,我们建议使用一个清楚的名称,并且在一个表单中保持唯一。不得不说,对于一个长的表单,我们可

能要给出一个更符合上文的字段名称。

录表单可以替我们做一些事情。它能够保证我们应用程序的安全以防止 CSRF 漏洞,验证用户输入并且渲染适当的

标记,这些标记是我们为表单定义的字段。

CSRF 保保护和和验证

CSRF 表示跨站请求伪造。CSRF 攻击是指第三方伪造 (像一个表单提交)请求到一个应用程序的服务器。一个易受攻

击的服务器假设从一个表单来的数据是来自它自己的网站并且采取相应的操作。

作为一个例子,比方说,一个邮件提供商可以让你通过提交一个表单来删除你的账号。表单发送一个 POST 请求到服

务器上的 account_delete 端点并且当表单被提交的时候删除 录的账号。我们可以在自己的网站上创建一个表单,

该表单发送一个 POST 请求到同一个 account_delete 端点。现在,如果我们让某人点击我们表单的提交按钮 (或者

通过 JavaScript 来这样做),邮件提供商提供的 录账号就会被删除掉。当然邮件提供商还不知道表单提交并不是发

生在他们的网站上。

因此如何才能阻止 POST 请求来自别的网站?WTForms 通过在渲染每一个表单的时候生成一个唯一的令牌使得成为

可能。生成的令牌会被传回到服务器,伴随着 POST 请求的数据,在表单被接受之前令牌必须接受服务器的验证。关

键的是令牌是与存储在用户会话 (cookies)的一个值有关并且会在一段时间后失效 (默认是 30 分钟)。这种方式就

能够保证提交一个有效表单的人就是加载页面的人 (或者至少是使用同一电脑的人),而且他们只能在加载页面 30

分钟内这样做。

要开始使用 Flask-WTF 保护 CSRF,我们需要为我们的 录页定义一个视图。

# ourapp/views.py

from flask import render_tem

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值