flask-wtf和WTForms官网翻译详解
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官网翻译详解的更多相关文章
- 官网实例详解-目录和实例简介-keras学习笔记四
官网实例详解-目录和实例简介-keras学习笔记四 2018-06-11 10:36:18 wyx100 阅读数 4193更多 分类专栏: 人工智能 python 深度学习 keras 版权声明: ...
- Flask - WTF和WTForms创建表单
目录 Flask - WTF和WTForms创建表单 一. Flask-WTF 1.创建基础表单 2.CSRF保护 3.验证表单 4.文件上传 5.验证码 二. WTForms 1. field字段 ...
- 卸载 Cloudera Manager 5.1.x.和 相关软件【官网翻译】
问题导读: 1.不同的安装方式,卸载方法存在什么区别?2.不同的操作系统,卸载 Cloudera Manager Server and 数据库有什么区别? 重新安装不完整如果你来到这里,因为你的安装没 ...
- Knockoutjs官网翻译系列(一)
最近马上要开始一个新项目的研发,作为第一次mvvm应用的尝试,我决定使用knockoutjs框架.作为学习的开始就从官网的Document翻译开始吧,这样会增加印象并加入自己的思考,说是翻译也并不是纯 ...
- 【官网翻译】性能篇(四)为电池寿命做优化——使用Battery Historian分析电源使用情况
前言 本文翻译自“为电池寿命做优化”系列文档中的其中一篇,用于介绍如何使用Battery Historian分析电源使用情况. 中国版官网原文地址为:https://developer.android ...
- 【工利其器】必会工具之(三)systrace篇(1)官网翻译
前言 Android 开发者官网中对systrace(Android System Trace)有专门的介绍,本篇文章作为systrace系列的开头,笔者先不做任何介绍,仅仅翻译一下官网的介绍.在后续 ...
- android測试工具MonkeyRunner--google官网翻译
近期在复习之前的笔记,在回想MonkeyRunner时看了看google官网的内容,写得不错.就翻译出来分享下.事实上google官网真是一个学习的好地方. 基础知识 MonkeyRunner工具提供 ...
- python web开发-flask中response,cookies,session对象使用详解
Response响应对象: 当一个web请求被服务器处理完后,会返回用户请求的响应,这时候就要用到响应对象,根据响应给用户的形式不同,响应对象有以下几种处理方式 如果返回的是一个合法的响应对象,它会从 ...
- 【Android API】Android 4.1 API官方文档详解
原文:http://android.eoe.cn/topic/summary 翻译:[eoeAndroid原创团队]kris.流风而逝.贼寇在何方.snowxwyo.lsy4833406 更新日期:2 ...
- IMWebConf 2017 官网彩蛋解谜
前言 IMWebConf 2017 ←这是官网 然后看到了这个: 所以就试了下,作为一个前端菜鸟,发现通关还挺简单的,不过每个方面的知识都涉及到一点,所以在这里总结一下. 下面进入正题. 第 0 关 ...
随机推荐
- SQL 的 AND、OR 和 NOT 运算符:条件筛选的高级用法
AND 运算符 SQL的AND运算符用于根据多个条件筛选记录,确保所有条件都为TRUE才返回记录.下面是AND运算符的基本语法: SELECT column1, column2, ... FROM t ...
- Java轻松实现,每天给对象发情话!
一.引言 最近看到一篇用js代码实现表白的文章,深有感触.然后发现自己也可以用java代码实现,然后就开始写代码了,发现还挺有意思的,话不多说开搞实现思路: 使用HttpClient远程获取彩虹屁生成 ...
- C#读 .properties文件
引用:https://www.cnblogs.com/wardensky/p/5331851.html properties文件 MONGO_URL = mongodb://172.16.20.3/s ...
- C语言 05 变量与常量
变量 变量就像在数学中学习的 x,y 一样,可以直接声明一个变量,并利用这些变量进行基本的运算,声明变量的格式为: 数据类型 变量名称 = 初始值;(其中初始值可以不用在定义变量时设定) = 是赋值操 ...
- HTML基础之input系列
<form action=""> <div> 用户名:<input type="text" name="user&quo ...
- redis 简单整理——pipeline[十]
前言 简单整理一下pipeline. 正文 1)发送命令 2)命令排队 3)命令执行 4)返回结果 其中1)+4)称为Round Trip Time(RTT,往返时间). pipeline它能将一组R ...
- mac版本vscode窗口崩溃crashed
1.截图 出现时机 当安装依赖的时候大概率会出现,甚至安装一次依赖会出现几次 解决 具体原因未知 重新启动电脑以及退出软件都不能解决 去官网重新下载,重新安装问题解决
- 4.CSS层次选择器
1.后代选择器:在某个元素的后面 1 /*后代选择器*/ 2 body p{ 3 background: crimson; 4 } 2.子选择器:仅一代 1 /*子选择器*/ 2 body>p{ ...
- Apsara Stack 同行者专刊 | 怀同行之心,筑信任之基,践数智之行
简介: 政企云平台处在怎样的历史阶段?数智创新的同行者们面临着怎样的挑战与机遇?在时代巨幕下,政企期待云厂商扮演怎样的角色?阿里云智能研究员.混合云平台总经理刘国华认为,云厂商不仅需要有定力与实力,也 ...
- 压测场景下的 TIME_WAIT 处理
简介: 压测场景下的 TIME_WAIT 处理 1. 序 某专有云项目具备压测场景,在Windows的压测机上用 LoadRunner 进行业务的压力测试,压测运行一段时间后出现大量端口无法分配的报错 ...