Flask-WTF是简化了WTForms操作的一个第三方库。WTForms表单的两个主要功能是验证用户提交数据的合法性以及渲染模板。还有其它一些功能:CSRF保护,

文件上传等。安装方法:pip install flask-wtf

1.1.WTForms简单验证

from flask import Flask,request,render_template
from wtforms import Form,StringField
from wtforms.validators import Length,EqualTo app = Flask(__name__) class RegistForm(Form):
username = StringField(validators=[Length(min=3,max=10,message='用户名必须在3到10位之间')])
password = StringField(validators=[Length(min=6,max=10,message='密码必须6到10位之间')])
password_repeat = StringField(validators=[Length(min=6,max=10),
EqualTo("password",message='密码不一致')]) @app.route('/')
def hello_world():
return 'Hello World!' @app.route('/regist/',methods=['GET','POST'])
def regist():
if request.method == 'GET':
return render_template('regist.html')
else:
form = RegistForm(request.form)
if form.validate():
return 'success'
else:
print(form.errors)
return 'fail' if __name__ == '__main__':
app.run()

1.2.WTForms常用验证器和自定义验证器

常用的验证器

  • Email:验证上传的数据是否为邮箱格式
  • EqualTo:两个字段是否相等(密码和重复密码)
  • InputRequired:原始数据的需要验证
  • Length:长度限制,有mix和max两个值
  • NumberRange:数字的区间,有mix和max两个值,如果在两个值之间则满足
  • Regexp:自定义正则表达式
  • URL:必须url格式
  • UUID:uuid格式
from wtforms import Form,StringField,IntegerField
from wtforms.validators import Length,EqualTo,Email,InputRequired,NumberRange
from wtforms.validators import Regexp,URL,ValidationError class LoginForm(Form):
email = StringField(validators=[Email(message='邮箱格式不正确')])
username = StringField(validators=[InputRequired(message='这个字段必须要填')])
age = IntegerField(validators=[NumberRange(min=18,max=100)])
phone = StringField(validators=[Regexp(r'1[38745]\d{9}')])
homepage = StringField(validators=[URL()])
captcha = StringField(validators=[Length(4,4)]) # 自定义验证器
def validate_captcha(self,field):
if field.data != '': #field.data:用户提交过来的数据
raise ValidationError('验证码错误') #如果验证失败,就抛出验证失败的异常

1.3.使用wtforms渲染模板

forms.py

class SettingsForm(Form):
username = StringField(label="用户名:",validators=[InputRequired(message='这个字段必须要填')])
age = IntegerField('年龄:',validators=[NumberRange(min=18, max=100)])
remeber = BooleanField('记住我')
tags = SelectField('标签',choices=[(1,'python'),(2,'django')])

flask_wtforms_demo.py

@app.route('/settings/',methods=['GET','POST'])
def settings():
if request.method == 'GET':
form = SettingsForm()
return render_template('settings.html',form=form)
else:
pass

settings.html

<form action="" method="post">
{# 括号里面可以添加样式#}
<p>{{ form.username.label }} {{ form.username(class="") }}</p>
<p>{{ form.age.label }} {{ form.age() }}</p>
<p>{{ form.remeber.label }} {{ form.remeber() }}</p>
<p>{{ form.tags.label }} {{ form.tags() }}</p>
<p><input type="submit" value="提交"></p>
</form>

最新文章

  1. JavaScript权威设计--jQuery,Ajax.animate,SVG(简要学习笔记二十)[完结篇]
  2. 使用python pylab库 画线
  3. PHP中的数组(一)
  4. Codeforces Round #368 (Div. 2) D. Persistent Bookcase
  5. Teradata 的rank() 和 row_number() 函数
  6. 官方 Material Design App
  7. 微软职位内部推荐-Senior Network Engineer
  8. 百度前端技术学院Html&amp;CSS学习资源
  9. WPF DataGrid 增加&quot;更新&quot;模板列,根据行Row的选择而显示&quot;更新&quot;按钮
  10. GPU编程-Thread Hierarchy(3)
  11. 12 Nonlinear Transformation
  12. Beta冲刺-用户测试报告
  13. 解决mac上每次升级nodejs都要重新安装扩展包的问题
  14. asyncio 基础用法
  15. Linux-负载均衡LVS
  16. 在IIS7上导出所有应用程序池的方法批量域名绑定
  17. Python学习过程中各个难点---函数篇
  18. 通过impala更改Kudu表属性
  19. servlet转发重定向
  20. 【Java】快速排序的非递归实现

热门文章

  1. java处理图片--图片的缩放,旋转和马赛克化
  2. Android 打造编译时注解解析框架 这只是一个开始
  3. hibernate入门-基本配置及简单的crud操作
  4. BZOJ_3916_[Baltic2014]friends_hash
  5. BZOJ_2724_[Violet 6]蒲公英_分块
  6. Win10安装cygwin并添加apt-cyg
  7. 一副美丽而庞大的SQL TUNING计划美图
  8. 基于promtheus的监控解决方案
  9. 深入浅出Git教程(转载)
  10. 一个比喻讲明Docker是什么