https://flask-wtf.readthedocs.io/en/stable/#

https://wtforms.readthedocs.io/en/2.3.x/

介绍:

wtform
flask-wtf:集成了wtform,csrf的保护和文件上传功能,图形验证码。

wtform

flask-wtf整合了wtforms。包含了csrf,文件上传,和图形验证码

别人对他俩的区分理解。flask-wtf集成了wtforms,并添加了其它的东西

再来看看wtforms的介绍

也就是任何框架都可以使用这个,django也可以用他。WTForms有下面的一些内容,字段、校验,插件,csrf

这其实就是表单加了各种验证功能了。比如注册表单,如果用户名必须是三种类型数据组合,不符合的就不能提交,密码是多少位,如果不符合后面还会有提示的,邮箱是否符合邮箱的格式,如果不符合都是会阻止你成功提交的。我们下面是用bootstrap做的表单,但是没有验证功能,我们这里要说的就是有验证功能的表单。因此上面的介绍里,比较明显的就是它支持数据验证,csrf保护

它是个form类,我们要写的花都是要继承它的form类

它下面有一些属性和方法

百度翻译:

属性

数据 data

包含每个字段数据的字典。

请注意,每次访问该属性时都会生成该属性,因此在使用该属性时应小心,因为如果您重复访问该属性,可能会非常昂贵。通常在需要迭代表单中的所有数据时使用。如果只需要访问已知字段的数据,则应使用form.<field>。数据,而不是此代理属性。

错误 errors

包含每个字段的错误列表的字典。如果表单尚未验证或没有错误,则为空。

元  meta

这是一个包含各种配置选项和自定义表单行为的对象。有关可以使用类Meta选项自定义哪些内容的更多信息,请参阅类Meta文档。

方法

validate(extra_validators=无)[source]

通过对每个字段调用Validate来验证表单。如果验证通过,则返回True。

如果表单定义了validate_<fieldname>方法,它将作为字段validate的额外验证器附加。

参数  Parameters

extra_validators–将字段名映射到要运行的额外验证器方法列表的dict。在创建字段时,额外的验证器在验证器通过后运行。如果表单具有validate_<fieldname>,则它是最后一个额外的验证器。

填充对象(obj) populate_obj(obj)

使用表单字段中的数据填充传递的obj的属性。

笔记

这是一次破坏性的行动;与字段同名的任何属性都将被重写。小心使用。

一个常见的用法是编辑纵断面图:

def edit_profile(request):
user = User.objects.get(pk=request.session['userid'])
form = EditProfileForm(request.POST, obj=user) if request.POST and form.validate():
form.populate_obj(user)
user.save()
return redirect('/home')
return render_to_response('edit_profile.html', form=form)

在上面的示例中,因为表单没有直接绑定到用户对象,所以在准备好将其移动之前,您不必担心任何脏数据会进入其中

__iter__()

Iterate form fields in creation order.

按创建顺序重复表单字段。

__contains__(名称)  __contains__(name)

如果命名字段是此表单的成员,则返回True。

 

_获取翻译()  _get_translations()

已弃用,因为版本2.0:_get_translations将在WTForms 3.0中删除,请使用Meta。改为get_translations。

在子类中重写以提供替代翻译工厂。

必须返回一个提供gettext()和ngettext()方法的对象。

定义表单

要定义表单,需要创建表单的子类,并将字段声明性地定义为类属性:

class MyForm(Form):
first_name = StringField(u'First Name', validators=[validators.input_required()])
last_name = StringField(u'Last Name', validators=[validators.optional()])

字段名可以是任何有效的python标识符,但有以下限制:

  • 字段名称区分大小写。
  • 字段名不能以“_”(下划线)开头
  • 字段名不能以“validate”开头

表单继承

表单可以根据需要子类化其他表单。新表单将包含父表单的所有字段,以及子类上定义的任何新字段。子类上重新使用的字段名会导致新定义模糊原始定义。

class PastebinEdit(Form):
language = SelectField(u'Programming Language', choices=PASTEBIN_LANGUAGES)
code = TextAreaField() class PastebinEntry(PastebinEdit):
name = StringField(u'User Name')

在线验证程序

为了在不需要编写一次性验证程序的情况下为单个字段提供自定义验证,可以通过使用约定validate_fieldname定义方法来内联定义验证:

class SignupForm(Form):
age = IntegerField(u'Age') def validate_age(form, field):
if field.data < 13:
raise ValidationError("We're sorry, you must be 13 or older to register")

使用表单¶

表单通常是在用于处理操作的控制器代码中构造的,来自框架的表单数据包装器传递给其构造函数,以及可选的ORM对象。典型视图的开头如下:

def edit_article(request):
article = Article.get(...)
form = MyForm(request.POST, article)

典型的CRUD视图让用户编辑需要更新各种字段的对象。表单将包含描述要更新的字段和验证规则的字段,其中字段的属性名称与对象上的属性名称相匹配。Form的第二个参数obj参数用于在初始视图中填充表单默认值。

笔记

虽然我们确实传递了一个对象作为数据源,但只有在没有POST数据的情况下才使用这个对象数据。如果有任何POST数据,则忽略对象数据。这是出于安全和一致性的原因。

这种模式主要是一种方便,因为大多数应用程序控制器不会将GET和POST请求分离为单独的视图方法。

然后,构造的表单可以验证任何输入数据,如果无效则生成错误。通常,视图中的验证模式如下所示:

if request.POST and form.validate():
form.populate_obj(article)
article.save()
return redirect('/articles')

注意,我们有它,所以只有当有POST数据时才会调用validate()。我们以这种方式进行验证检查的原因是,当没有POST数据时(例如在典型的CRUD表单中),我们不希望导致验证错误。

在门控块中,我们调用populate_obj()将数据复制到“article”对象的字段中。我们也会在成功完成后重定向。我们在发布后重定向的原因是与发布/重定向/获取设计模式相关的最佳实践。

如果没有POST数据,或者数据无法验证,那么视图将“通过”呈现部分。Form对象可以传递到模板中,其属性可以用于渲染字段,也可以用于显示错误:

return render('edit.html', form=form, article=article)

因此,我们有一个完全简单的“编辑对象”页面设置,它说明了使用WTForms的最佳实践方法。这绝不是使用WTForms的唯一方法,而只是说明各种功能的工作原理。

以下是我们刚刚创建的视图的完整代码:

def edit_article(request):
article = Article.get(...)
form = MyForm(request.POST, article) if request.POST and form.validate():
form.populate_obj(article)
article.save()
return redirect('/articles') return render('edit.html', form=form, article=article)

flask-wtf和WTForms官网翻译详解的更多相关文章

  1. 官网实例详解-目录和实例简介-keras学习笔记四

    官网实例详解-目录和实例简介-keras学习笔记四 2018-06-11 10:36:18 wyx100 阅读数 4193更多 分类专栏: 人工智能 python 深度学习 keras   版权声明: ...

  2. Flask - WTF和WTForms创建表单

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

  3. 卸载 Cloudera Manager 5.1.x.和 相关软件【官网翻译】

    问题导读: 1.不同的安装方式,卸载方法存在什么区别?2.不同的操作系统,卸载 Cloudera Manager Server and 数据库有什么区别? 重新安装不完整如果你来到这里,因为你的安装没 ...

  4. Knockoutjs官网翻译系列(一)

    最近马上要开始一个新项目的研发,作为第一次mvvm应用的尝试,我决定使用knockoutjs框架.作为学习的开始就从官网的Document翻译开始吧,这样会增加印象并加入自己的思考,说是翻译也并不是纯 ...

  5. 【官网翻译】性能篇(四)为电池寿命做优化——使用Battery Historian分析电源使用情况

    前言 本文翻译自“为电池寿命做优化”系列文档中的其中一篇,用于介绍如何使用Battery Historian分析电源使用情况. 中国版官网原文地址为:https://developer.android ...

  6. 【工利其器】必会工具之(三)systrace篇(1)官网翻译

    前言 Android 开发者官网中对systrace(Android System Trace)有专门的介绍,本篇文章作为systrace系列的开头,笔者先不做任何介绍,仅仅翻译一下官网的介绍.在后续 ...

  7. android測试工具MonkeyRunner--google官网翻译

    近期在复习之前的笔记,在回想MonkeyRunner时看了看google官网的内容,写得不错.就翻译出来分享下.事实上google官网真是一个学习的好地方. 基础知识 MonkeyRunner工具提供 ...

  8. python web开发-flask中response,cookies,session对象使用详解

    Response响应对象: 当一个web请求被服务器处理完后,会返回用户请求的响应,这时候就要用到响应对象,根据响应给用户的形式不同,响应对象有以下几种处理方式 如果返回的是一个合法的响应对象,它会从 ...

  9. 【Android API】Android 4.1 API官方文档详解

    原文:http://android.eoe.cn/topic/summary 翻译:[eoeAndroid原创团队]kris.流风而逝.贼寇在何方.snowxwyo.lsy4833406 更新日期:2 ...

  10. IMWebConf 2017 官网彩蛋解谜

    前言 IMWebConf 2017 ←这是官网 然后看到了这个: 所以就试了下,作为一个前端菜鸟,发现通关还挺简单的,不过每个方面的知识都涉及到一点,所以在这里总结一下. 下面进入正题. 第 0 关 ...

随机推荐

  1. C++ 编程入门指南:深入了解 C++ 语言及其应用领域

    C++ 简介 什么是 C++? C++ 是一种跨平台的编程语言,可用于创建高性能应用程序. C++ 是由 Bjarne Stroustrup 开发的,作为 C 语言的扩展. C++ 为程序员提供了对系 ...

  2. C 语言数组教程:定义、访问、修改、循环遍历及多维数组解析

    C 数组 数组用于将多个值存储在单个变量中,而不是为每个值声明单独的变量. 要创建数组,请定义数据类型(例如 int)并指定数组名称,后面跟着方括号 []. 要将值插入其中,请使用逗号分隔的列表,并在 ...

  3. java内存模型(jmm)概念初探

    1.和java内存结构的区别: 很多人会把jmm和Java内存结构搞混,网上搜到的一些文章也是如此,java内存结构就是我们常说的堆,栈,方法区,程序计数器..., 当jvm虚拟机启动的时候,会初始化 ...

  4. 演示webuploader和cropperjs图片裁剪上传

    最近有个项目要在浏览器端裁剪并上传图片.由于缺乏人力,只能我上阵杀敌.通过参考各种文章,最后决定用cropperjs进行图片裁剪,用webuploader上传文件.本文涉及到的知识至少有Java基础. ...

  5. 微信小程序为什么引入 rpx

    前言 众所周知,px 是一个叫做像素的东西,pixel. 像素是指由图像的小方格组成的,这些小方块都有一个明确的位置和被分配的色彩数值,小方格颜色和位置就决定该图像所呈现出来的样子. 可以将像素视为整 ...

  6. 【git】ignore文件详解

    1.功能 可以指定git,对于某些文件或者文件夹不进行追踪记录,例如一些依赖或者编译中间文件等. 2.使用注意 2.1 对于已经有提交记录的文件 对于已经提交的文件,即使加入了ignore文件也会被g ...

  7. 力扣1620(java&python)-网络信号最好的坐标(中等)

    题目: 给你一个数组 towers 和一个整数 radius . 数组  towers  中包含一些网络信号塔,其中 towers[i] = [xi, yi, qi] 表示第 i 个网络信号塔的坐标是 ...

  8. KubeVela v1.3 多集群初体验,轻松管理应用分发和差异化配置

    ​简介:KubeVela v1.3 在之前的多集群功能上进行了迭代,本文将为你揭示,如何使用 KubeVela 进行多集群应用的部署与管理,实现以上的业务需求. 作者:段威(段少) 在当今的多集群业务 ...

  9. Serverless Kubernetes 落地实践

    ​简介:如何通过原生 Kubernetes 提供 Serverless 能力?如何借力丰富的云原生社区生态?本文将给大家介绍一下我们在 Serverless Kubernetes 上的落地实践. 作者 ...

  10. [Go] Golang并发控制: WaitGroup 含义和常规用法

    一个 WaitGroup 等待一个 goroutine 集合的结束. 主 goroutine 调用 Add 设置需要等待的 goroutine 数量. 接下来每个 goroutine 运行并在结束时调 ...