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. 开源共建携手并进 OpenHarmony使能千行百业生态成果亮相HDC2022

     11月4日-6日,第四届华为开发者大会 2022(Together)在中国松山湖如期举行,本次大会围绕"创新照见未来"这一主题,向外界展示了OpenAtom OpenHarmon ...

  2. C++ 模板和泛型编程详解

    C++中的模板和泛型编程是非常重要的概念.模板是一种将数据类型作为参数的通用程序设计方法.它们允许开发人员编写可以处理各种数据类型的代码,而无需为每种数据类型编写不同的代码.下面介绍了一些关于C++中 ...

  3. Git 07 IDEA基本使用

    IDEA 是目前最流行的 Java 集成开发环境,我们一般使用 Git 都是在 IDEA 上操作. 这里以 2021.3.2 版 IDEA 为例. 克隆项目 1.复制 Gitee 上的项目地址 2.点 ...

  4. 在ECS上安装部署openGauss数据库指导手册

    在 ECS 上安装部署 openGauss 数据库指导手册 文档下载:在 ECS 上安装部署 openGauss 数据库指导手册.docx 前 言 简介 openGauss 是关系型数据库,采用客户端 ...

  5. HarmonyOS网络管理开发—Socket连接

      简介 Socket连接主要是通过Socket进行数据传输,支持TCP/UDP/TLS协议. 基本概念 ● Socket:套接字,就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象. ●  ...

  6. Perm 排列计数——Lucas&dfs

    思路:这道题给出的公式看明白后即可得出正解,我们可以把他想象成一颗二叉树,任意一个点的任意一个子孙一直除以2后最终都会到达一终点,终点则为以该点为根的子树的最小值. so--我们可以将根节点作为最后终 ...

  7. cesiumjs GIS引擎源码编译并运行-2021年3月18日最新版【1.68~1.79.1版本亲测成功】

    前言 本篇最初是在2020年的[macOS Big Sur + Cesium 1.76版本]下编译成功,后在[macOS Catalina+cesium 1.79.1版本]编译过程中,出现编译的错误和 ...

  8. Access Single User Mode (Reset Root Password)--CentOS 修改root密码

    Access Single User Mode (Reset Root Password) Published on: Wed, Sep 17, 2014 at 12:52 pm EST FAQ  L ...

  9. 《c#高级编程》第2章C#2.0中的更改(三)——迭代器

    一.概念 C#迭代器(Iterator)是一种特殊类型的方法,它使得在使用循环遍历数据集合时更加简单和有效.使用迭代器可以通过简单地定义迭代器方法来自动实现枚举器模式. 当您需要访问一个数据集合中的每 ...

  10. 技术人如何"结构化"高效思考?

    1 前言 你是否在解决问题时,常常觉得脑子很乱,很多零散的信息迸发出来,但就是无法形成解决方案. 之所以这样,原因就在于,我们的大脑处理不了太多零散而复杂的信息.人类大脑在处理信息的时候,有两个规律: ...