表单安全

无需任何配置,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. JS对JSON的操作总结

    对于前端完全是菜鸟,迫于无奈,工作中要用到JS,尤其对JSON的处理为多,网上搜了一下,所讲的基本雷同.所以把平时用的比较多的JSON处理方法总结了一下,权当加深记忆. 一.概述 JSON(JavaS ...

  2. dnf命令 (常用总结)

    DNF是新一代的rpm软件包管理器.他首先出现在 Fedora 18 这个发行版中.而最近,它取代了yum,正式成为 Fedora 22 的包管理器. DNF包管理器克服了YUM包管理器的一些瓶颈,提 ...

  3. 【Ubuntu16.04】 install nginx

    1. Download PGP key in order to pass the authentication of the nginx repository signature. click to ...

  4. Mikit前端框架,轻量级CSS&JS前端框架

    Mikit CSS Framework Mikit介绍 Mikit是前端开发人员和前端设计师所喜爱的Web框架.Mikit的创建和设计旨在为前端社区提供最灵活而强大的CSS框架. 与许多其他网络框架不 ...

  5. github如何搜索资料

    进入自己的主页,然后点击explore→trending; 或者google搜索,如github java 后端 请参考:http://mp.weixin.qq.com/s?__biz=MzA4NTQ ...

  6. Day-1: Python准备知识

    python简介 不同于c语言这种贴近硬件的言语,Python是用来编写应用程序的高级编程语言.Python是一款开源软件,所以它有非常完善的代码库,宝库内置的基本库和众多开发者提供的第三方库.这就允 ...

  7. ssm整合说明与模板-Spring Spring MVC Mybatis整合开发

    ssm整合说明 spring+spring mvc+mybatis 说明 源码下载 由于之前存在ssh框架,spring+struts+hibernate,其中spring负责aop与ioc,所以一般 ...

  8. JAVA定时任务实现的几种方式

    近日项目开发中需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前一天的日志信息,借此机会整理了一下定时任务的几种实现方式,由于项目采用spring框架,所以我都将结合spring框架来介绍. 一 ...

  9. Hash表分析

    http://baike.baidu.com/link?url=Ua74895uGf1NuPxB4pawmuAXedi427jJvM6aSLh_V1-23ptlMc7XIrr_cylIBn5d

  10. oracle锁表问题解决方法

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp52 Oracle数据库操作中,我们有时会用到锁表查询以及解锁和kill进程 ...