Flask系列09--Flask中WTForms插件,及自定义验证器
一.概述
django中的forms组件非常的方便,在flask中有WTForms的组件实现的也是类似的功能, 安装这个插件

二.简单使用
文档地址https://wtforms.readthedocs.io/en/latest/
简单写一个注册的form
# 注册表单
class RegForm(Form):
username = simple.StringField(
label='用户名',
validators=[validators.DataRequired(message='用户名不能为空')] ) password = simple.PasswordField(
label='密码',
validators=[
validators.DataRequired(message='密码不能为空'),
validators.Length(min=1, max=10, message='密码长度不正确'),
]
) re_password = simple.PasswordField(
label='确认密码',
validators=[
validators.EqualTo('password', message='密码不一致')
]
) email = simple.StringField(
label='邮箱',
validators=[
validators.Email(message='邮箱格式不正确')
]
) hobby = core.SelectMultipleField(
label='爱好',
choices=[
(1, '足球'),
(2, '篮球'),
(3, '网球'),
], default=[1, 3], # 设置默认值,
coerce=int ) gender = core.SelectField(
label='性别',
choices=[
(1, '男'),
(2, '女')
],
default=,
coerce=int
) sub = simple.SubmitField(
label='提交',
render_kw={'style': "color: red"},
)
这里写了sub按钮,在前端文件中如果不想让标签显示出来比如
前端页面可以这样写
<form action="" method="post" novalidate>
{% for field in form_obj %}
{% if field.type == "SubmitField" %}
<p>{{ field }}{{ field.errors.0 }}</p>
{% else %}
<p>{{ field.label }}{{ field }}{{ field.errors.0 }}</p>
{% endif %}
{% endfor %}
</form>
结果预览:

三 . 自定义验证器 validator
有两种写法,一种是类的,另外一种是写成函数
1.函数
class SignupForm(Form):
age = IntegerField(u'Age')
def validate_age(form, field):
if field.data < 13:
raise ValidationError("We're sorry, you must be 13 or older to register")
2. 类
# 自定义验证器,类 的写法
class pwd_validator():
def __init__(self, message=None):
self.message = message
def __call__(self, form, field):
pwd = field.data
if pwd != '':
raise ValidationError(self.message)
示例 登陆:
# 自定义验证器,类 的写法
class pwd_validator():
def __init__(self, message=None):
self.message = message
def __call__(self, form, field):
pwd = field.data
if pwd != '':
raise ValidationError(self.message) class LoginForm(Form):
username = simple.StringField(
label='用户名',
validators=[validators.DataRequired(message='用户名不能为空'), ]
)
# 自定义验证器, 函数的写法
def validate_username(form, field):
if field.data != 'tom':
raise ValidationError('用户名错误')
password = simple.PasswordField(
label='密码',
validators=[
validators.DataRequired(message='密码不能为空'),
validators.Length(min=1, max=10, message='密码长度不正确'),
pwd_validator('密码必须是123'), ]
)
sub = simple.SubmitField(
label='登陆',
render_kw={'class': 'red'}
)
cbv中运用
class Login(views.MethodView):
def get(self):
form_obj = LoginForm()
return render_template("login.html", form_obj=form_obj)
def post(self):
dic = request.form.to_dict()
username = dic.get('username')
password = dic.get('password')
# if username == 'tom' and password == '123':
login_data = LoginForm(request.form)
if login_data.validate():
# print(login_data.data)
session['user'] = dic['username']
s = session.get('user')
return '登陆成功 session是{}'.format(s)
else: return render_template('login.html', form_obj=login_data)

Flask系列09--Flask中WTForms插件,及自定义验证器的更多相关文章
- flask中的endpoint、自定义转化器、与djnago中session区别、利用装饰器实现登录认证
flask路由中的endpoint 与自定义转化器 ''' endpoint主要用于 反向解析, 例如:login函数中配的路由是/login,其中endpoint='lg' 则在其他函数,可以用 u ...
- flask 自定义验证器(行内验证器、全局验证器)
自定义验证器 在WTForms中,验证器是指在定义字段时传入validators参数列表的可调用对象,下面来看下编写自定义验证器. 行内验证器 除了使用WTForms提供的验证器来验证表单字段,我们还 ...
- Flask系列(二)Flask基础
知识点回顾 1.flask依赖wsgi,实现wsgi的模块:wsgiref(django),werkzeug(flask),uwsgi(上线) 2.实例化Flask对象,里面是有参数的 app = F ...
- Flask系列(六)Flask实例化补充及信号
一.实例化补充 instance_path和instance_relative_config是配合来用的. 这两个参数是用来找配置文件的,当用app.config.from_pyfile('setti ...
- 在pixi中使用你的自定义着色器
通过几天的学习,对openGL.shader有了一个大致的了解. 回到学习的初衷吧,在基于pixi.js重构D3项目的时候,因为精灵层级的问题,我得按照一定的先后顺序将不同类别的精灵添加到场景中去. ...
- Flask系列之蓝图中使用动态URL前缀
让我们先来看一个简单的例子,假设有下面这样一个蓝图(是关于用户主页的): from flask import Blueprint, render_template profile = Blueprin ...
- Flask系列06--(中间件)Flask的特殊装饰器 before_request,after_request, errorhandler
一.使用 Flask中的特殊装饰器(中间件)方法常用的有三个 @app.before_request # 在请求进入视图函数之前 @app.after_request # 在请求结束视图函数之后 响应 ...
- Flask系列(四)Flask实现简单页面登陆
from flask import Flask,render_template,request,redirect,session app = Flask(__name__,template_folde ...
- Flask系列(五)Flask实现分页
一.flask分页组件 from urllib.parse import urlencode,quote,unquote class Pagination(object): ""& ...
随机推荐
- springMVC学习一 工作机制
springMVC下面的四大组件: (1)DispatcherServlet : 前端控制器,接收所有请求 ,并把请求路径和请求参数解析出来,本质是一个servlet在web.xml中配置 (如果配置 ...
- Android Makefile中是 如何识别 TARGET_PRODUCT 的
http://blog.csdn.net/stevenliyong/article/details/5285334 今天有时间小看一下Android 的Makefile, 终于稍有明白Android ...
- mysql 字符串数值计算 精度丢失
我进行了一些测试.truncate(abs('414')/100,2)truncate('414'/100,2)truncate('4.14',2)truncate('4.1400',2)都有精度丢失 ...
- hadoop mapreduce 写入hbase报错 Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect
现象:map任务构造数据正常,reduce任务,开始也正常,速度很快 ,在hbase 的管理界面,可以看到,5W以上的请求数 当reduce 执行到 70% 左右的时候,就堵住了,查看yarn的web ...
- 836. Rectangle Overlap
class Solution { public: bool isRectangleOverlap(vector<int>& rec1, vector<int>& ...
- php中如何配置项目虚拟路径
php虚拟目录的设置在apache目录下打开conf->httpd.conf文件,找到<IfModule dir_module>,在</IfModule>后面添加如下代码 ...
- 2018.10.24 NOIP模拟 小 C 的数组(二分+dp)
传送门 考试自己yyyyyy的乱搞的没过大样例二分+dp二分+dp二分+dp过了606060把我自己都吓到了! 这么说来乱搞跟被卡常的正解比只少101010分? 那我考场不打其他暴力想正解血亏啊. 正 ...
- 关于拼接SQL语句sqlMap的使用方法
1.为什么使用? 主要还是为了代码中获取到值,然后带入SQL语句中拼接查询 2.怎么使用? 1)bean继承了BaseEntity类,该类中有 /** * 自定义SQL(SQL标识,SQL内容) */ ...
- highChart图表
Highcharts 是一个用纯JavaScript编写的一个图表库, 能够很简单便捷的在web网站或是web应用程序添加有交互性的图表,并且免费提供给个人学习.个人网站和非商业用途使用.HighCh ...
- load data会被当成一个事务处理ERROR 1197
问题现象: l有一份csv格式的文件,大小在14G左右.max_binlog_cache_size=4G. 登录mysql实例,选择对应的表通过load data往指定表里导数.大概20分钟左右,报以 ...