from wtforms import Form,StringField,IntegerField
from wtforms import validators
from wtforms.validators import Length,EqualTo,Email,InputRequired,NumberRange,\
Regexp,URL,UUID class RegisterForm(Form):
username = StringField(validators=[Length(max=10,min=3,message='用户名长度不正确')])
password = StringField(validators=[Length(max=10,min=3,message='密码长度不正确')])
password_repeat = StringField(validators=[Length(max=10,min=3,message='密码长度不正确'),EqualTo('password')]) class LoginForm(Form):
# email = StringField(validators=[Email(message='邮箱格式不正确')])
# username = StringField(validators=[InputRequired(message='必须填写用户名')])#inputrequired必填字段
# age = IntegerField(validators=[NumberRange(12,100)])#验证数字在某某区间之内
# phone = StringField(validators=[Regexp(r'1[85347]\d{9}',message='手机号码格式不正确')])
# home_page = StringField(validators=[URL()])#必须验证必须是一个跳转链接
uuid = StringField(validators=[UUID()])#验证uuid的
from flask import Flask,request,render_template
from forms import RegisterForm,LoginForm app = Flask(__name__) @app.route('/')
def hello_world():
return 'Hello World!' @app.route('/register/',methods=['get','post'])
def register():
if request.method == 'GET':
return render_template('register.html')
else:
# username = request.form.get('username')
# password = request.form.get('password')
# password_repeat = request.form.get('password_repeat')
# if 3 > len(username) or len(username)> 10:
# return '用户名长度不正确'
# if 3 > len(password) or len(password)> 10:
# return '密码长度不正确'
# if password != password_repeat:
# return '密码输入不一致'
form = RegisterForm(request.form)
if form.validate():
return 'success'
else:
print(form.errors)#{'username': ['用户名长度不正确'],
# 'password': ['密码长度不正确'], 'password_repeat': ['密码长度不正确']}
#因为是字典,获取方式我就不写了
return 'fail' @app.route('/login/',methods=['get','post'])#如果methods没有post方法,会报状态码405错误,
# 静态文件不允许请求post方法
def login():
if request.method == "GET":
return render_template('login.html')
else:
login_form = LoginForm(request.form)
if login_form.validate():
return 'success'
else:
return '{errors}'.format(errors=login_form.errors.get('phone')[0])#获取具体错误信息 if __name__ == '__main__':
app.run(debug=True)

WTForms常用的验证器的更多相关文章

  1. Angular:Reactive Form的使用方法和自定义验证器

    本文将介绍Angular(Angular2+)中Reactive Form的有关内容,包括: Reactive Form创建方法 如何使用验证 自定义验证器 下面开始进入正文! Reactive Fo ...

  2. flask 自定义验证器(行内验证器、全局验证器)

    自定义验证器 在WTForms中,验证器是指在定义字段时传入validators参数列表的可调用对象,下面来看下编写自定义验证器. 行内验证器 除了使用WTForms提供的验证器来验证表单字段,我们还 ...

  3. form——验证器Validators

    form表单最大的作用就是验证功能了,通过cleaned_data清洗,我们可以获取传来的值,通过参数.验证器.自定义验证方法,我们可以做到很多的验证. 验证器可用于在不同类型的字段之间重用验证逻辑. ...

  4. Flask系列09--Flask中WTForms插件,及自定义验证器

    一.概述 django中的forms组件非常的方便,在flask中有WTForms的组件实现的也是类似的功能, 安装这个插件 二.简单使用 文档地址https://wtforms.readthedoc ...

  5. 五十四:WTForms表单验证之自定义表单验证器

    如果想要对表单中的某个字段进行自定义验证,则需要对这个字段进行单独的验证1.定义一个方法,命名规则为:validate_字段名(self, filed)2.在方法中,使用filed.data获取字段的 ...

  6. Struts2 验证框架 validation.xml 常用的验证规则

    validation.xml 的命名规则和放置路径: 文件名:<ActionClassName>-validation.xml <ActionClassName>就是要验证的A ...

  7. Flex 内置验证器—验证用户输入

    今晚对于Flex中的Validator类(所有验证器的父类)测试一下 ---->其中常用的验证类有StringValidator,NumberValidator,DateValidator 测试 ...

  8. PropTypes验证器

    PropTypes用于对类型的验证,从而更加容易捕获bug.在React v15.5之前,它内置React.PropTypes函数帮助解决,之后放弃支持,采用prop-types库定义. import ...

  9. Angular11 模板表单、响应式表单(自定义验证器)、HTTP、表单元素双向绑定

    1 模板表单 模型通过指令隐式创建 技巧01:需要在模块级别引入 FormsModule ,通常在共享模块中引入再导出,然后在需要用到 FormsModule 的模块中导入共享模块就可以啦 impor ...

随机推荐

  1. 【Winform-自定义控件】自定义Tab Control 带关闭符号(X)的标签页

    a form & a tabControl 思路: DrawMode设一定要设为OwnerDrawFixed 事件:Form_Load.tabControl1_DrawItem.tabCont ...

  2. ip 转发(调度器的路由转发)

    临时开启 [root@proxy ~]# echo > /proc/sys/net/ipv4/ip_forward 永久开启 [root@proxy ~]# vim /etc/sysctl.co ...

  3. include和require的区别(PHP版本7)

    亲自测试了一下,发现include有条件包含require无条件包含这个区别在PHP7版本中(据说PHP5以后)是不存在的了,也就是在if(false){ } 中都不会执行:还有一个返回值的问题,测试 ...

  4. 2019icpc南京网络赛 F 主席树

    题意 给一个\(n\)的全排列数组\(a\),求一个递推数组每一项的值:\(ans[i]=ans[j]+1\),\(j\)为\(a[pos[i]-k]到a[pos[i]+k],(pos[i]为i在数组 ...

  5. delphi通过url下载文件

    procedure TfrmEngineerImport.btnDownloadClick(Sender: TObject);var vsql, SourceFile, DestFile, filen ...

  6. AcWing:145. 超市(贪心 + 小根堆 or 贪心 + 并查集)

    超市里有N件商品,每个商品都有利润pipi和过期时间didi,每天只能卖一件商品,过期商品(即当天di<=0di<=0)不能再卖. 求合理安排每天卖的商品的情况下,可以得到的最大收益是多少 ...

  7. linux端口释放

    查看linux连接端口范围 cat /proc/sys/net/ipv4/ip_local_port_range 调低端口释放等待时间 echo 20 >  /proc/sys/net/ipv4 ...

  8. zookeeper系列(三)zookeeper的使用--开源客户端

    作者:leesf    掌控之中,才会成功:掌控之外,注定失败, 原创博客地址:http://www.cnblogs.com/leesf456/ 奇文共欣赏,大家共同学习进步. 一.前言 上一篇博客已 ...

  9. JVM 监控工具——jstack

    [参考文章]:jstack 命令使用经验总结 1. 简介 jstack主要用于生成java虚拟机当前时刻的线程快照. 线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合, 主要目的是定位 ...

  10. Java-JVM 类加载机制

    类的生命周期中的第一步,就是要被 JVM 加载进内存,类加载器就是来干这件事. 一.类加载器种类 系统提供了 3 种类加载器: 1.启动类加载器(Bootstrap ClassLoader) 由 C ...