WTF常用验证器
这其实就是一个验证器
我们可以ctrl+左键查看一下
这些都是他的验证器
我们来用一下email这个验证器
首先我们先安装这个验证器pip install email_validator
初始代码
from flask import Flask,request,render_template
from forms import RegistForm,LoginForm
app = Flask(__name__)
@app.route('/')
def index():
return '首页'
@app.route('/login/',methods = ['GET','POST'])
def login():
if request.method == 'GET':
return render_template('login.html')
else:
form = LoginForm(request.form)
if form.validate():
return '注册成功'
else:
print(form.errors)
return '注册失败'
if __name__ =='__main__':
app.run(debug=True,port=8888)
login.html文件
Title邮箱: | |
forms.py文件这里面装有我们的验证器,使用email验证器
from wtforms import Form,StringField
from wtforms.validators import Length,EqualTo,Email
# 表单验证
class LoginForm(Form):
email = StringField(validators=[Email()])
运行视图函数,打开网址
我们输入asd@qq.com
点击提交返回注册成功:
我们输入asd
点击提交:
显示注册失败
并且pc(pycharm)中会给我们返回这个:
如果我们在email验证器后面加上参数message呢
我们依旧输入asd
pc(pycharm)中会返回这个
NumberRange验证器:验证长度
from wtforms.validators import NmuberRange
我们设置一个关于年龄的验证器
我们查看NumberRange的源码
可以发现有一个min max就是最小值和最大值
再修改一下html文件的代码
访问网址
我们输入81:
提示注册失败:
我们输入80:
提示注册成功:
InputRequired:验证是否输入
from wtforms.validators import InputRequired
我们在打开网址:
我们不输入任何东西点击提交:
我们随便输入点击提交:
Regexp:
from wtforms.validators import Regexp
打开网址:
我们随意写一个:
我们按照格式写一个:
URL:验证是否为url
from wtforms.validators import URL
打开网址
随便输入一个:
输入一个网址
验证码:
我们只是模拟一下,通常我们见到的验证码有4位的6位的,我们模拟一下4位的
但是我们现在仅仅只是验证了一下验证码的长度
如果我们的验证码 为5678呢,就是输出其他的都不行,就5678好使
怎么做呢,我们需要定义一个方法来对captcha进行验证
class LoginForm(Form):
# email = StringField(validators=[Email(message='格式不正确')])
# NumberRange
# age = IntegerField(validators=[NumberRange(1,80)])
# InputRequired
# username = StringField(validators=[InputRequired()])
# Regexp
# telphon = StringField(validators=[Regexp(r'1[3589]\d{9}')])
# URL
# info = StringField(validators=[URL()])
# 验证码
captcha = StringField(validators=[Length(min=4,max=4)]) #验证长度只有四位数可以
# 5678 除了5678都不行 用if是不行的
def validate_captcha(self,field): # 必须定义一个方法才能够去验证,validate_后面加上你要验证的
if field.data != '5678':
raise
如果field.data不等于5678我们就要他返回一个错误 ValidationError
我们进入网址
我们输入5678: