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. springboot中spring.profiles.include的妙用

    我们在开发Spring Boot应用时,通常同一套程序会被应用和安装到几个不同的环境,比如:开发.测试.生产等.其中每个环境的数据库地址.服务器端口等等配置都会不同,如果在为不同环境打包时都要频繁修改 ...

  2. string str = File.ReadAllText(@"c:\temp\ascii.txt");

    string str = File.ReadAllText(@"c:\temp\ascii.txt");

  3. 在Ubuntu 18.04系统中蓝牙鼠标连接失败问题的解决

    2018-08-22 16:00:35作者:谖瓞稿源:linux站 如果你在Ubuntu 18.04操作系统中有蓝牙鼠标连接失败问题,那就参考下面的解决方法处理. 解决方法 首先在系统终端下输入: b ...

  4. XML -- 为什么选择XML?

    1.XML是什么,主要功能? XML全称(EXtensible Markup Language),是可扩展性标记语言. XML主要功能是用来传输和存储数据.它就是一种纯文本.只要程序能访问纯文本就能访 ...

  5. Sublime Text 3 全程详细图文使用教程

    一. 前言 使用Sublime Text 也有几个年头了,版本也从2升级到3了,但犹如寒天饮冰水,冷暖尽自知.最初也是不知道从何下手,满世界地查找资料,但能查阅到的资料,苦于它们的零碎.片面,不够系统 ...

  6. AJAX-基础-1

    概述 AJAX = Asynchronous JavaScript And XML(异步 JavaScript 及 XML) AJAX 是 Asynchronous JavaScript And XM ...

  7. phpcms9 从注入点入手和 从前台getshell

    弄了3天了  这个点 总结一下这三天的坑吧 0X01 注入点入手 /index.php?m=wap&c=index&a=init&siteid=1 获取cookie 传给 us ...

  8. (十九)C语言之指针

  9. SRS之分发HLS

    来自: Delivery HLS 1. 综述 SRS支持HLS/RTMP两种成熟而且广泛应用的流媒体分发方式. RTMP指Adobe的RTMP(Realtime Message Protocol),广 ...

  10. LeetCode 109. 有序链表转换二叉搜索树(Convert Sorted List to Binary Search Tree)

    题目描述 给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 示例: 给定的有序链表: ...