WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证

from flask import Blueprint
from flask import request
from flask import render_template
from wtforms.fields import simple, core #simple:简单的字段
from wtforms import Form, validators #validators:校验条件 reg = Blueprint("reg", __name__) class RegForm(Form):
username = simple.StringField(
label="用户名:", #前端显示的字段
     #default:None, #组件生成后的默认值 
id="username",
render_kw={"class": " form-control col-sm-2 "}, #为标签创建属性
validators=[ #声明校验条件
validators.DataRequired(message="用户名不能为空"),
validators.Length(min=2, max=7, message="用户名不能小于%(min)d,不能大于%(max)d") ]
)
password = simple.PasswordField(
label="密码:",
id="password",
     render_kw={"class": " form-control col-sm-2 "},
validators=[
validators.DataRequired(message="密码不能为空"),
validators.Length(min=6, max=16, message="用户名不能小于%(min)d,不能大于%(max)d") ]
)
repassword = simple.PasswordField(
label="确认密码",
render_kw={"class": " form-control col-sm-2 "},
validators=[
validators.EqualTo("password", message="密码不一致")
] ) email = simple.StringField(
label="邮箱",
render_kw={"class": " form-control col-sm-2 "},
validators=[
validators.Email(message="邮箱格式不符")
]
) gender = core.RadioField(
label="性别",
choices=[
(1, "男"),
(2, "女") ],
coerce=int ) hobby = core.SelectMultipleField(
label="爱好",
choices=[
(1, "抽烟"),
(2, "喝酒"),
(3, "烫头"),
],
coerce=int
) sub = simple.SubmitField(
label="注册", ) @reg.route("/reg", methods=["GET", "POST"])
def reg_func():
if request.method == "GET":
reg = RegForm() #实例化对象
return render_template("reg.html", reg=reg)
else:
new_reg = RegForm(formdata=request.form)
if new_reg.validate():
return "注册成功"
else:
return render_template("reg.html", reg=new_reg)

login.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title> </head>
<body>
<form action="" method="post" novalidate>
{{ lf.username.label }} {{ lf.username }} {{ lf.username.errors.0 }}
{{ lf.password.label }} {{ lf.password }} {{ lf.password.errors.0 }}
{{ lf.sub }}
</form>
</body>
</html>

reg.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title> </head>
<body>
<form action="" method="post">
{% for f in regf %}
{% if f.label == "登陆" %}
<p>{{ f }}{{ f.errors.0 }}</p>
{% else %}
<p>{{ f.label }}{{ f }}{{ f.errors.0 }}</p>
{% endif %}
{% endfor %} </form> </body>
</html>

Flask 三方组件 WTForms的更多相关文章

  1. Flask 三方组件 Flask-Session

    使用 from flask import session, Flask from flask_session import Session from redis import Redis app = ...

  2. flask --- 03 .特殊装饰器, CBV , redis ,三方组件

    一.特殊装饰器(中间件) 1.before_request 在请求进入视图函数之前 @app.before_request def look(): 2. after_request 在结束视图函数之后 ...

  3. flask中的wtforms使用

    一.简单介绍flask中的wtforms WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证. 安装: pip3 install wtforms 二.简单使用wtfo ...

  4. flask框架----flask中的wtforms使用

    一.简单介绍flask中的wtforms WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证. 安装: pip3 install wtforms 二.简单使用wtfo ...

  5. Flask学习【第7篇】:Flask中的wtforms使用

    简介flask中的wtforms WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证. 安装 pip3 install wtforms 简单使用wtforms组件 用 ...

  6. Flask系列(七)Flask中的wtforms使用

    一.简单介绍flask中的wtforms WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证. 安装: pip3 install wtforms 二.简单使用wtfo ...

  7. Flask - WTF和WTForms创建表单

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

  8. 基于python实现的三方组件----Celery

    一.基于python实现的三方组件----Celery 1.作用 用于异步周期任务的处理 2.Celery的组成 (1)任务 app (2)记录任务的缓存(通常用redis或rabbitMQ) 任务记 ...

  9. Flask【第7篇】:Flask中的wtforms使用

    flask中的wtforms使用 一.简单介绍flask中的wtforms WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证. 安装: pip3 install w ...

随机推荐

  1. SQL Server等待

    等待大概分为3类:资源等待.队列等待.外部等待 过滤掉系统相关的等待类型的语句.(查看常用的等待信息) SELECT wait_type , signal_wait_time_ms , wait_ti ...

  2. Leetcode 344. 反转字符串

    344. Reverse String 解题代码: class Solution { public: void reverseString(vector<char>& s) { , ...

  3. 如何让微信里的html应用弹出“点击右上角分享到朋友圈”的图片

    一个分享按钮,一个隐藏的图片(这个图片绝对定位在右上角)然后就是点击显示,点击隐藏了... <a href="javascript:;" onclick="docu ...

  4. python-中缀表达式转前缀表达式

    作完了中缀前缀,作一个归纳吧. https://www.cnblogs.com/unixfy/p/3344550.html # coding = utf-8 class Stack: def __in ...

  5. twitter typeahead控件使用经历

    typeahead控件可以用于自动完成这个功能,在jQuery的UI中也有自动完成的控件.以前都是用jQuery UI中的自动完成的控件,但这次想用个轻量级的自动完成的控件,因此就调查了一下typeh ...

  6. Python_函数_参数

    def   是函数的关键字,Python解释器一旦执行到def,默认不执行 def li(): n = 8 n +=1 print(n) li() li2 = li li2() 结果: 9 9 ret ...

  7. Hbase的写入负载均衡

    在写Hbase的时候,会担心数据分布在各个region上不均匀(与预分区无关): 这个时候可能想到的方式:hash.加盐等(当然是可以的,但是读取的时候咋办呢? 哪天写一个这样的文章) 本文采用新方式 ...

  8. Codeforces 316E3 线段树 + 斐波那切数列 (看题解)

    最关键的一点就是 f[ 0 ] * a[ 0 ] + f[ 1 ] * a[ 1 ] + ... + f[ n - 1] * a[ n  - 1] f[ 1 ] * a[ 0 ] + f[ 2 ] * ...

  9. 元素滚动到底部或顶部时阻止body滚动

    移动端的弹窗内容有滚动条,滚动到底部或顶部时或影响弹窗下的body滚动,某些浏览器滚动到顶部时不松手就触发了刷新页面的情况,如果不需要这样的默认体验,就需要加一下判断了. var startX,sta ...

  10. iframe实现伪ajax

    iframe实现伪ajax 数据提交的两种方式: Form Ajax Ajax提交数据的方法: JS实现 Jquery “伪”Ajax "伪"Ajax: iframe+from实现 ...