文档章节

WTForms介绍

指尖跳动的精灵
 指尖跳动的精灵
发布于 2015/02/04 20:15
字数 393
阅读 1726
收藏 0

WTforms作用:当网站中需要用到表单时,WTForms变得很有效。应该把表单定义为类,作为单独的一个模块。

表单类:

class wtforms.form.Form:

创建表单:

创建表单时,通常是创建一个Form的子类,表单的中的字段作为类的属性,如:

from wtforms import Form, BooleanField, TextField,PasswordField,validators
class RegistrationForm(Form):
    username = TextField('Username', [validators.Length(min=4, max=25)])
    email = TextField('Email Address', [validators.Length(min=6, max=35)])
    password = PasswordField('New Password', [
        validators.Required(),
        validators.EqualTo('confirm', message='Passwords must match')
    ])
    confirm = PasswordField('Repeat Password')
    accept_tos = BooleanField('I accept the TOS', [validators.Required()])

需要注意的是:

1、字段名是区分大小写的

2、字段名不能以'_'开头

3、字段名不能以'validate'开头

Form的主要属性:

data:字典类型,包括每一个字段的数据。如果需要频繁访问字段值,可以使用form.<field>.data进行访问

errors:字典类型,包括每一个字段的错误信息。

字段的主要类型有:

BooleanField,DateField,DateTimeField,DecimalField,FileField,FloatField,FormField,HiddenField,IntegerField,PasswordField,RadioField,SelectField,SelectMultipleField,StringField,SubmitField,TextAreaField,TextField.

如何使用Form:

在视图函数中,表单用法示例如下:

@app.route('/register', methods=['GET', 'POST'])
def register():
    form = RegistrationForm(request.form)
    if request.method == 'POST' and form.validate():
        user = User(form.username.data, form.email.data,
                    form.password.data)
        db_session.add(user)
        flash('Thanks for registering')
        return redirect(url_for('login'))
    return render_template('register.html', form=form)

模版中的表单:

以下是一个使用宏的示例_formhelpers.html模板:

{% macro render_field(field) %}
  <dt>{{ field.label }}
  <dd>{{ field(**kwargs)|safe }}
  {% if field.errors %}
    <ul class=errors>
    {% for error in field.errors %}
      <li>{{ error }}</li>
    {% endfor %}
    </ul>
  {% endif %}
  </dd>{% endmacro %}

以下是使用了上面的_formhelpers.htmlregister.html模板:

{% from "_formhelpers.html" import render_field %}
<form method=post action="/register">
  <dl>
    {{ render_field(form.username) }}
    {{ render_field(form.email) }}
    {{ render_field(form.password) }}
    {{ render_field(form.confirm) }}
    {{ render_field(form.accept_tos) }}
  </dl>
  <p><input type=submit value=Register></form>


© 著作权归作者所有

指尖跳动的精灵
粉丝 16
博文 90
码字总数 48459
作品 0
海淀
私信 提问
加载中

评论(2)

指尖跳动的精灵
指尖跳动的精灵 博主

引用来自“知之为知之”的评论

请教模版宏是什么意思,什么情况下会使用到,谢谢
模版宏就相当于是函数
知之为知之
知之为知之
请教模版宏是什么意思,什么情况下会使用到,谢谢
python设计模式-模板方法模式

首先先介绍一下咖啡和茶的冲泡方法: 茶 咖啡 用python代码实现冲泡方法大概是这个样子: 仔细看上边两端代码会发现,茶和咖啡的实现方式基本类似,都有,, 这三个方法。 如何重新设计这两个...

goodspeed
2018/12/02
0
0
flask学习笔记之--表单控件

表单验证 Flask-WTF 从 version 0.9.0有了变化,正确要引用wtforms包 正确的写法: from flask.ext.wtf import Formfrom wtforms import TextField, BooleanFieldfrom wtforms.validators impo......

jeffsui
2014/12/30
215
0
慕课网Flask构建可扩展的RESTful API-4. 理解WTForms并灵活改造她

4.1 重写WTForms 优化1 之前的代码,修改完成之后,已经修复了之前的缺陷,但是这样爆出了两个问题: 1.代码太啰嗦了,每个试图函数里,都需要这么写 2.ClientTypeError只是代表客户端类型异...

Meet相识_bfa5
2018/06/16
0
0
慕课网Flask高级编程实战-3.蓝图、模型与CodeFirst

3.1 应用、蓝图与视图函数 1.Flask的层级关系 Flask最上层是app核心对象 在这个核心对象上可以插入很多蓝图,这个蓝图是不能单独存在的,必须将app作为插板插入app 在每一个蓝图上,可以注册...

Meet相识_bfa5
2018/06/04
0
0
Tornado Web 开发 框架搭建 (1)

环境配置 使用 python 3.3 和tornado, 其实也是个人兴趣问题,然后数据库也使用mysql, 这里 使用oracle 自家的 mysql-connector. 自然,orm就选择 sqlalchemy了. 模板引擎使用jinja2, form验证...

冰星零
2013/09/22
2.7K
0

没有更多内容

加载失败,请刷新页面

加载更多

手写RPC框架指北另送贴心注释代码一套

Angular8正式发布了,Java13再过几个月也要发布了,技术迭代这么快,框架的复杂度越来越大,但是原理是基本不变的。所以沉下心看清代码本质很重要,这次给大家带来的是手写RPC框架。 完整代码...

全菜工程师小辉
11分钟前
2
0
【Java】开发收货

简介 谨以此篇,记载开发过程中的一些tips。 编译器 【Shift + F6】可实现变量的联动修改。

Areya
27分钟前
5
0
DOM官方定义

DOM Document Object Model 文档对象模型 DOM的官方定义:W3C的DOM,可以使程序或者脚本(JS或AS\JScript),动态的访问或者操作文档的内容、结构、样式。 DOM只是一个标准,操作网页的标准。...

前端老手
33分钟前
6
0
IT兄弟连 HTML5教程 HTML5的学习线路图 第一阶段学习网页制作

学习HTML5技术可并不是简单学会几个新增的标签而已,HTML5现在可以说是前端所有技术的代名词。需要学习的语言和工具不仅多,对于刚接触他们的新人会感觉很乱。另外,前端开发也会细分很多个开...

老码农的一亩三分地
34分钟前
6
0
可见性有序性,Happens-before来搞定

写在前面 上一篇文章并发 Bug 之源有三,请睁大眼睛看清它们 谈到了可见性/原子性/有序性三个问题,这些问题通常违背我们的直觉和思考模式,也就导致了很多并发 Bug 为了解决 CPU,内存,IO ...

tan日拱一兵
50分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部