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. 【Wince-自定义控件】ImageButton 带图片、文字

    1.看图 可以实现MouseDown改变背景颜色或背景图片. 遗憾是没有实现键盘触发按钮事件. 2.选择继承自Control基类 public class ImageButton : Control ...

  2. [Python之路] 使用装饰器给Web框架添加路由功能(静态、动态、伪静态URL)

    一.观察以下代码 以下来自 Python实现简易HTTP服务器与MINI WEB框架(利用WSGI实现服务器与框架解耦) 中的mini_frame最后版本的代码: import time def in ...

  3. C#验证数字的正则表达

    说明:@符号的作用,省去转义字符\ "^\\+?[1-9][0-9]*$" 与 @"^\+?[1-9][0-9]*$"   等效 @"^(0?[1-9 ...

  4. 灰度图像--图像分割 Marr-Hildreth算子(LoG算子)

    学习DIP第49天 转载请标明本文出处:*http://blog.csdn.net/tonyshengtan *,出于尊重文章作者的劳动,转载请标明出处!文章代码已托管,欢迎共同开发: https:/ ...

  5. B. Tell Your World(几何数学 + 思维)

    B. Tell Your World time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  6. 设置Linux自启服务以及优先级

    一. 启动优先级 今天有一台服务器没有正常启动,原因是有一个服务没有启动起来,因为A服务需要B服务启动之后才能正常启动,所以需要调整A,B服务的启动顺序.在网上查找了一些资料,总结了一下,以备以后需要 ...

  7. 关于一次同余方程的一类解法(exgcd,CRT,exCRT)

    1.解同余方程: 同余方程可以转化为不定方程,其实就是,这样的问题一般用拓展欧几里德算法求解. LL exgcd(LL a,LL b,LL &x,LL &y){ if(!b){ x=; ...

  8. flask读书记录

    1. 在flask中,如果我们在视图函数中使用data = request.get_json()方法获取数据,那么在客户端发送POST请求时,就需要设置设置正确的Content-Type首部.在aja ...

  9. svn 同步hook

    hook 目录下 cp pre-revprop-change.tmpl pre-revprop-change chmod a+x pre-revprop-change 同步代码初始化 sudo svn ...

  10. java拦截器获取请求完整参数

    public class OptLogAspect implements HandlerInterceptor { @Override public boolean preHandle(HttpSer ...