一、WTfroms简介

WTForms插件是类似于django的form组件的插件,可以帮我们写标签,校验数据等。

二、安装与使用

安装:

pip install WTForms

使用:

from wtforms import Form
from wtforms.fields import simple, core
from wtforms import validators class RegForm(Form): username = simple.StringField(
label="用户名",
validators=[
validators.DataRequired(message="数据不能为空!"),
validators.length(min=4, max=6, message="用户名不能少于4位且不能大于6位")
],
render_kw={"class": "form-control", "pp": ""}
)
password = simple.PasswordField(
label="密码",
validators=[
validators.DataRequired(message="密码不能为空!"),
validators.length(min=6, max=16, message="密码不能少于6位且不能大于6位"),
validators.Regexp(regex="\d+", message="密码必须是数字")
],
render_kw={"class": "form-control", "pp": ""}
)
re_password = simple.PasswordField(
label="确认密码",
validators=[
validators.EqualTo(fieldname="password", message="两次密码不一致")
],
render_kw={"class": "form-control"}
)
gender = core.RadioField(
label="性别",
validators=[
validators.DataRequired(message="请先选择一个性别!")
],
choices=((1, "男"), (2, "女")),
coerce=int,
# default=1,
)
hobby = core.SelectMultipleField(
label="爱好",
choices=((1, "游戏"), (2, "妹子"), (3, "汉子")),
coerce=int,
default=[1, 2],
render_kw={"class": "form-control"}
) @app.route("/register", methods=("GET", "POST"))
def reg():
form_obj = RegForm()
if request.method == "POST":
print(request.form)
form_obj = RegForm(request.form)
if form_obj.validate():
ers = request.form.to_dict()
print(ers)
print(form_obj.data)
return "注册成功"
return render_template("reg.html", form_obj=form_obj) if __name__ == '__main__':
app.run(debug=True)

前端:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css"
integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-4 col-md-offset-4">
<form action="" method="post" novalidate>
{% for field in form_obj %}
<div class="form-group">
{{ field.label }}
{{ field }}
{{ field.errors.0 }}
</div>
{% endfor %}
<div>
<button class="btn btn-primary btn-lg btn-block">注册</button>
</div>
</form>
</div>
</div>
</div> </body>
</html>

Flask之WTfroms组件的更多相关文章

  1. Flask第三方工具组件介绍

    flask-wtf组件flask-login组件flask-session组件flask-sqlalchemy组件flask-script组件flask-cache组件flask-assets组件fl ...

  2. flask框架----flask-session组件

    简介 flask-session是flask框架的session组件,由于原来flask内置session使用签名cookie保存,该组件则将支持session保存到多个地方,如: redis:保存数 ...

  3. Python Flask wtfroms组件

    简介 WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证. 安装: pip3 install wtforms 用户登录注册示例 1. 用户登录 当用户登录时候,需要对 ...

  4. flask之三方组件

    Flask-session Flask-session跟框架自带的session有什么区别呢 框架自带的session是通过请求上下文~放入到Local中的~那如果我们想把session放入别的地方怎 ...

  5. Flask框架—flask_sqlalchemy组件使用

    一.flask_sqlalchemy组件 我们之前学过SQLAlchemy,一个独立的数据库关系对象映射,其实在flask中也有官方认可的第三方SQLAlchemy组件,用于处理flask中对象关系映 ...

  6. 8、flask之flask-script组件

    Flask Script扩展提供向Flask插入外部脚本的功能,包括运行一个开发用的服务器,一个定制的Python shell,设置数据库的脚本,cronjobs,及其他运行在web应用之外的命令行任 ...

  7. flask之flask-script组件

    Flask Script扩展提供向Flask插入外部脚本的功能,包括运行一个开发用的服务器,一个定制的Python shell,设置数据库的脚本,cronjobs,及其他运行在web应用之外的命令行任 ...

  8. flask框架----flask-script组件

    Flask Script扩展提供向Flask插入外部脚本的功能,包括运行一个开发用的服务器,一个定制的Python shell,设置数据库的脚本,cronjobs,及其他运行在web应用之外的命令行任 ...

  9. 1.7 flask 的组件 wtfroms使用

    2019-1-7 17:59:37 还有两天左右flask就结束啦!昨晚逛了一下吾爱破解还有慕课,发现有三个意外项目, Django生鲜项目,flask电影网站项目,vue美团网项目,都保存百度云啦, ...

随机推荐

  1. 如何将整数转换为timespan

    可以使用From方法,这些方法可将Days / Days / minutes / seconds / milliseconds / ticks转换为TimeSpam格式,如下所示: TimeSpan ...

  2. ISO/IEC 9899:2011 条款6——语言

    6 语言 6.1 标记法 1.在本条款中所使用的语法标记法.语义类别(非终结符)用斜体字指示,而字面量单词以及字符集成员(终结符)用粗体字指示.跟在一个非终结符后面的冒号(:)引出其定义.在单独的行中 ...

  3. Jmeter获取 json字符的另外一种写法

    在jmeter使用过程中,我们经常会看到接口返回数据类型为application/json,也就时我们常说的json格式. 而在功能测试时,我们经常会要对它的结果进行断言,确认结果是否与预期一致,有时 ...

  4. 单例设计模式代码-bxy

    struct ConnectInfo { const QObject *sender; //发送者 const char *signal_str; //发送信号 const QObject *reci ...

  5. 在使用redis做缓存后,mybatis的延迟加载失效

    原来使用的是EHcache,mybatis延迟加载没有问题,改成redis后,延迟加载获得数据时就会发生错误. 报:Cannot get Configuration as configuration ...

  6. [LeetCode] 815. Bus Routes 公交路线

    We have a list of bus routes. Each routes[i] is a bus route that the i-th bus repeats forever. For e ...

  7. idea的groovy设置

    idea的groovy设置 groovy使用的是java的jdk 新建groovy项目,第一次新建的时候,Groovy library是空的,需要点击右边的Create...新建. 但是由于brew ...

  8. 面试之leetcode20堆栈-字符串括号匹配,队列实现栈

    1 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合.左括号必须以正确的顺序闭合.注意空字符串可被认 ...

  9. A Simple Question of Chemistry

    #include<stdio.h> int main() { int i, l; ]; ]; l = ; ) { l++; } ; a[i]!= && i<l; i+ ...

  10. as3效率优化

    1.改进算法无论对于那一种程序,好的算法总是非常重要的,而且能够极大地提高程序性能,所以任何性能的优化第一步就是从算法或者说程序逻辑的优化开始,检查自己的程序是否有多余的运算,是否在没有必要的时候做了 ...