flask-wtf
web 表单扩展
- - 生成表单组件的HTML代码
- - 后台验证
- - 向web端返回错误信息
- - 在web页面显示错误信息
- - 防止跨域访问
pip3 install flask-wtf
# 简单表单组件
from flask import Flask,request,render_template
from flask_wtf import FlaskForm
from wtforms import TextField,IntegerField,TextAreaField,BooleanField,DateField, PasswordField,RadioField,SelectField,SelectMultipleField,SubmitField,validators
app = Flask(__name__)
app.secret_key ='sdjsldj4323sdsdfssfdf43434'
class ContactForm(FlaskForm):
name = TextField('姓名',[validators.Required('姓名必须输入')])
age = IntegerField('年龄',[validators.Required('必须输入年龄'),
validators.NumberRange(10,30,'年龄必须在10到30之间')])
birth = DateField('出生日期',[validators.Required('必须输入出生日期')])
isStudent = BooleanField('是否为学生')
resume = TextAreaField('简历',[validators.Length(10,200,'简历长度必须在10到200个字符之间')])
radio = RadioField('请选择一个', choices=[('值1', '选项1'), ('值2', '选项2'), ('值3', '选项3')],
validators=[validators.AnyOf(['值1', '值2', '值3'], '请选择一个值')])
select = SelectField('请选择一个选项', choices=[('值1', '选项1'), ('值2', '选项2'), ('值3', '选项3')],
validators=[validators.AnyOf(['值2'], '请选择第二项')])
selectMultiple = SelectMultipleField('请选择多个选项', choices=[('值1', '选项1'), ('值2', '选项2'), ('值3', '选项3')],
validators=[validators.AnyOf([['值1', '值2'], ['值1', '值3']], '只能选择前两项或第1项、第3项')])
email = TextField('Email', [validators.Required('请输入Email'), validators.email('请输入正确的Email地址')])
ip = TextField('IP', [validators.Required('请输入IP地址'), validators.IPAddress(message='请输入正确的IP地址')])
password1 = PasswordField('密码', [validators.Required('请输入密码')])
password2 = PasswordField('确认密码', [validators.Required('请确认密码'), validators.EqualTo('password1', '两次输入的密码不一致')])
value = TextField('电子邮件', [validators.Email('Email格式不正确'), validators.optional()])
url = TextField('Url', [validators.URL(message='Url格式不正确'), validators.optional()])
regexpValue = TextField('正则表达式', [validators.Regexp('^[a-z]{3}-[1-9]{3}$', message='格式错误,正确格式:abc-123'),
validators.Optional()])
submit = SubmitField('提交')
@app.route('/', methods=['GET','POST'])
def contact():
form = ContactForm()
form.age.data= 18
ok = False
if request.method == 'POST':
if form.validate_on_submit() == False:
print('error')
else:
print('输入成功')
print('姓名:',form.name.data)
print('年龄:', form.age.data)
print('出生日期:',form.birth.data)
if form.name.data == 'John':
form.name.data = "Joe"
ok = True
return render_template('simple.txt',form=form,ok=ok)
if __name__ == '__main__':
app.run(host = '0.0.0.0', port='1234')
<html> <head> <meta charset='UTF-8'> <title>Flask-WTF支持的简单表单组件</title> </head> <body> {% if ok %} <script> alert('数据录入成功.') </script> {% endif %} {% for message in form.name.errors %} <div>{{message}} {% endfor %} {% for message in form.age.errors %} <div>{{message}} {% endfor %} {% for message in form.birth.errors %} <div>{{message}} {% endfor %} {% for message in form.isStudent.errors %} <div>{{message}} {% endfor %} {% for message in form.resume.errors %} <div>{{message}} {% endfor %} <form action='http://localhost:1234' method=post> <fieldset> {{form.hidden_tag()}} {{form.name.label}}<br> {{form.name}} <br> {{form.age.label}}<br> {{form.age}} <br> {{form.birth.label}}<br> {{form.birth}} <br> {{form.isStudent.label}} {{form.isStudent}} <br> {{form.resume.label}}<br> {{form.resume}} {{form.radio.label}}<br> {{form.radio}}<br> {{form.select.label}}<br> {{form.select}} {{form.selectMultiple.label}}<br> {{form.selectMultiple}} {{form.email.label}}<br> {{form.email}} <br> {{form.ip.label}}<br> {{form.ip}} <br> {{form.password1.label}}<br> {{form.password1}} <br> {{form.password2.label}}<br> {{form.password2}} <br> {{form.value.label}}<br> {{form.value}} <br> {{form.regexpValue.label}}<br> {{form.regexpValue}} <br> {{form.url.label}}<br> {{form.url}} <br> <br> {{form.submit}} </fieldset> </form> </body> </html>

浙公网安备 33010602011771号