表单安全

无需任何配置,FlaskForm将提供具有CSRF(Cross-site request forgery,也被称为one-click attack 或者session riding,通常缩写为CSRF 或者XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。)保护的会话安全表单,我们鼓励你什么都不用修改。

但是如果你想要禁用csrf保护,可以这样做:

form = FlaskForm(csrf_enabled=False)

您可以全局禁用它 -- 但是强烈不推荐您使用这样的配置:

WTF_CSRF_ENABLED = False

为了生成csrf令牌,你必须有一个秘密密钥,这通常与你的Flask应用程序密钥(SECREY_KEY)相同。 如果要使用另一个密钥,请单独配置它:

WTF_CSRF_SECRET_KEY = 'a random string'

文件上传

Flask-WTF提供的FileField与WTForms提供的字段不同。 它将检查文件是FileStorage的非空实例,否则数据将为None。

from flask_wtf import FlaskForm
from flask_wtf.file import FileField, FileRequired
from werkzeug.utils import secure_filename class PhotoForm(FlaskForm):
photo = FileField(validators=[FileRequired()]) @app.route('/upload', methods=['GET', 'POST'])
def upload():
if form.validate_on_submit():
f = form.photo.data
filename = secure_filename(f.filename)
f.save(os.path.join(
app.instance_path, 'photos', filename
))
return redirect(url_for('index')) return render_template('upload.html', form=form)

记住将HTML表单的enctype设置为multipart / form-data,否则request.files将为空。

<form method="POST" enctype="multipart/form-data">
...
</form>

Flask-WTF处理将表单数据传递给您的表单。 如果您准确的传递数据,请记住request.form必须与request.files结合使用,才能查看文件数据。

form = PhotoForm()
# is equivalent to: from flask import request
from werkzeug.datastructures import CombinedMultiDict
form = PhotoForm(CombinedMultiDict((request.files, request.form)))

验证

Flask-WTF支持使用FileRequired和FileAllowed验证文件上传,它们可以与Flask-WTF和WTForms的FileField类一起使用。

FileAllowed也适用于Flask-Uploads。

from flask_uploads import UploadSet, IMAGES
from flask_wtf import FlaskForm
from flask_wtf.file import FileField, FileAllowed, FileRequired images = UploadSet('images', IMAGES) class UploadForm(FlaskForm):
upload = FileField('image', validators=[
FileRequired(),
FileAllowed(images, 'Images only!')
])

他也可以不使用Flask-Uploads,而是通过直接传递扩展名来使用。

class UploadForm(FlaskForm):
upload = FileField('image', validators=[
FileRequired(),
FileAllowed(['jpg', 'png'], 'Images only!')
])

验证码

Flask-WTF还提供了通过Recaptcha对RecaptchaField进行校验:

from flask_wtf import FlaskForm, RecaptchaField
from wtforms import TextField class SignupForm(FlaskForm):
username = TextField('Username')
recaptcha = RecaptchaField()

这可以个一些配置共同使用,不过必须配置它们。

RECAPTCHA_PUBLIC_KEY 需要一个公钥.
RECAPTCHA_PRIVATE_KEY 需要一个私钥.
RECAPTCHA_API_SERVER 可选择设定的Recaptcha API服务器.
RECAPTCHA_PARAMETERS 可设定JavaScript (api.js) 参数.
RECAPTCHA_DATA_ATTRS 可设定数据属性选项. 参考链接

RECAPTCHA_PARAMETERS和RECAPTCHA_DATA_ATTRS的示例如下:

RECAPTCHA_PARAMETERS = {'hl': 'zh', 'render': 'explicit'}
RECAPTCHA_DATA_ATTRS = {'theme': 'dark'}

为了方便测试您的应用程序,如果app.testing为True,recaptcha字段将始终为您方便可见。

并且可以轻松地在模板中设置:

<form action="/" method="post">
{{ form.username }}
{{ form.recaptcha }}
</form>

Flask-WTF 创建表单P2的更多相关文章

  1. Flask - WTF和WTForms创建表单

    目录 Flask - WTF和WTForms创建表单 一. Flask-WTF 1.创建基础表单 2.CSRF保护 3.验证表单 4.文件上传 5.验证码 二. WTForms 1. field字段 ...

  2. Flask—03-bootstrap与表单

    bootstrap与表单 Bootstrap是美国Twitter公司的设计师Mark Otto和Jacob Thornton合作基于HTML.CSS.JavaScript 开发的简洁.直观.强悍的前端 ...

  3. activiti自定义流程之整合(二):使用angular js整合ueditor创建表单

    注:整体环境搭建:activiti自定义流程之整合(一):整体环境配置 基础环境搭建完毕,接下来就该正式着手代码编写了,在说代码之前,我觉得有必要先说明一下activit自定义流程的操作. 抛开自定义 ...

  4. activiti自定义流程之自定义表单(二):创建表单

    注:环境配置:activiti自定义流程之自定义表单(一):环境配置 在上一节自定义表单环境搭建好以后,我就正式开始尝试自己创建表单,在后台的处理就比较常规,主要是针对ueditor插件的功能在前端进 ...

  5. Flask教程 —— Web表单(上)

    第二章中介绍的request对象公开了所有客户端发送的请求信息.特别是request.form可以访问POST请求提交的表单数据. 尽管Flask的request对象提供的支持足以处理web表单,但依 ...

  6. activiti自己定义流程之整合(二):使用angular js整合ueditor创建表单

    基础环境搭建完成,接下来就该正式着手代码编写了,在说代码之前.我认为有必要先说明一下activit自己定义流程的操作. 抛开自己定义的表单不谈.通过之前的了解,我们知道一个新的流程開始.是在启动流程实 ...

  7. activiti自己定义流程之自己定义表单(二):创建表单

    注:环境配置:activiti自己定义流程之自己定义表单(一):环境配置 在上一节自己定义表单环境搭建好以后,我就正式開始尝试自己创建表单,在后台的处理就比較常规,主要是针对ueditor插件的功能在 ...

  8. 实验2、Flask模板、表单、视图和重定向示例

    实验内容 1. 实验内容 表单功能与页面跳转功 能是Web应用程序的基础功能,学习并使用他们能够更好的完善应用程序的功能.Flask使用了名为Jinja2的模板引擎,该引擎根据用户的交互级别显示应用程 ...

  9. 在火狐、360等浏览器中,用jquery创建表单并发送的问题

    某些浏览器无法使用js或者jquery直接创建表单并发送,这是由于这些浏览器在提交页面表单时要求页面有完整的标签项即<html><head><title></ ...

随机推荐

  1. yum和apt-get的区别

    一般来说著名的linux系统基本上分两大类: 1.RedHat系列:Redhat.Centos.Fedora等  2.Debian系列:Debian.Ubuntu等  RedHat 系列  1 常见的 ...

  2. InvalidateRect和UpdateWindow

    The UpdateWindow function updates the client area of the specified window by sending a WM_PAINT mess ...

  3. @Autowired和@Resource的区别是什么?

    @Autowired 与@Resource: 1.@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上. 2.@Autowired默认按类型装配 ...

  4. python+selenium自动化软件测试(第2章):WebDriver API

    2.1 操作元素基本方法 前言前面已经把环境搭建好了,从这篇开始,正式学习selenium的webdriver框架.我们平常说的 selenium自动化,其实它并不是类似于QTP之类的有GUI界面的可 ...

  5. POI设置excel添加列下拉框

    POI在生成excel模板时需要为列添加下拉框,我写了两个方法. @ 方法一:适用任何情况,不受下拉框值数量限制.但是需要通过引用其它列值. 思路大概如下: 1.创建一个隐藏的sheet页,用于存放下 ...

  6. switch实现一个两数的运算

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. postman 第2节 数据同步和创建测试集(转)

    启动postman 后在右上角可以登录账号,登录后就可以同步自己的api测试脚本,连上网在办公区在家都可以同步. 创建测试集 1.点击collections,点击add folder 2.create ...

  8. 融会贯通——最常用的“合成复用原则”技能点Get

    复用一个类的时候,多使用对象的组合/聚合的关联关系,而不是继承. 之前提到的"依赖倒转原则",是以里氏代换原则为基础的实现开闭原则目标的手段,这一条路线涉及到的是类的继承(包括单继 ...

  9. chrome开发工具指南(七)

    检查动画 使用 Chrome DevTools 动画检查器检查和修改动画. 通过打开动画检查器捕捉动画.检查器会自动检测动画并将它们分类为多个组. 通过慢速播放.重播或查看动画源代码来检查动画. 通过 ...

  10. Linux-chmod命令(4)

     chmod:(change mode)改变linux系统文件或目录的访问权限.用它控制文件或目录的访问权限. 格式 : [-cfvR][[+-=][rwxX]...][,...] 参数 1:  -c ...