Flask框架WTForm表单用法示例


Posted in Python onJuly 20, 2018

本文实例讲述了Flask框架WTForm表单用法。分享给大家供大家参考,具体如下:

运行环境:

python2.7

flask  0.11

flask-wtf  0.14.2

wtform能够通过一个类定义一些字段,这些字段会在前端生成标签,并且通过设置字段的验证规则,自动判断前端输入数据的格式。

一般用于用户登录,用户注册等信息录入。

示例:

from wtforms import Form
from flask import Flask,render_template,request,redirect
from wtforms.fields import core
from wtforms.fields import html5
from wtforms.fields import simple
from wtforms import validators
from wtforms import widgets
import sys
reload(sys)
sys.setdefaultencoding('utf8')
#python2.7 转码用的,避免显示中文为乱码
app = Flask(__name__,template_folder='templates')
app.debug=True
class LoginForm(Form):
  name = simple.StringField(
    label='用户名',  #前端显示中文
    validators=[
      validators.DataRequired(message='用户名不能为空'),
      validators.Length(min=6,max=18,message='用户名长度必须大于%(min)d且小于%(max)d')
    ],  #字段的验证规则
    widget=widgets.TextInput(), #页面上显示的标签
    render_kw={'class':'form=control'} #给上面插件生成的时候添加属性,比如bootstrap的属性
  )
  pwd = simple.PasswordField(
    label='密码',
    validators=[
      validators.DataRequired(message='密码不能为空'),
      validators.Length(min=8,message='用户名长度必须大于%(min)d'),
      validators.Regexp(regex="^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*/&]{8,}",
               message='密码至少8个字符,至少1个大写字母,1个小写字母'),
    ],
    widget=widgets.PasswordInput(),
    render_kw={'class':'from-control'}
  )
#字段,内部包含正则表达式
@app.route('/login',methods=['GET','POST'])
def login():
  if request.method == 'GET':
    form = LoginForm()
    return render_template('login.html',form=form)
    #将form对象传给前端
  else:
    form = LoginForm(formdata=request.form) #从请求体from中取值
    if form.validate():  #验证
      print "用户提交数据通过,提交的值为:",form.data
    else:
      print form.errors  #错误信息
    return render_template('login.html',form=form)
@app.route('/')
def hello_world():
  return 'Hello World!'
if __name__ == '__main__':
  app.run()
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="x-ua-compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Title</title>
</head>
<body>
<h1>登陆</h1>
<form method="post">
  <p>{{ form.name.label }} {{ form.name }} {{ form.name.errors[0] }}</p>
  <p>{{ form.pwd.label }} {{ form.pwd }} {{ form.pwd.errors[0] }}</p>
  <input type="submit" value="提交">
</form>
</body>
</html>

在前端,直接通过Form对象来取字段中的值,以及该值中的错误信息,错误信息我们一般取第一个即可,已经能够告诉用户信息错误了。

希望本文所述对大家基于Flask框架的Python程序设计有所帮助。

Python 相关文章推荐
Python中的MongoDB基本操作:连接、查询实例
Feb 13 Python
Python结合ImageMagick实现多张图片合并为一个pdf文件的方法
Apr 24 Python
Python socket实现的简单通信功能示例
Aug 21 Python
PyQt5实现简易计算器
May 30 Python
python中aioysql(异步操作MySQL)的方法
Apr 11 Python
python批量下载抖音视频
Jun 17 Python
python 使用socket传输图片视频等文件的实现方式
Aug 07 Python
PyTorch中Tensor的数据统计示例
Feb 17 Python
python数据预处理 :样本分布不均的解决(过采样和欠采样)
Feb 29 Python
解决json中ensure_ascii=False的问题
Apr 03 Python
TensorFlow Autodiff自动微分详解
Jul 06 Python
详解pyqt5的UI中嵌入matplotlib图形并实时刷新(挖坑和填坑)
Aug 07 Python
Python使用pymongo模块操作MongoDB的方法示例
Jul 20 #Python
Python闭包函数定义与用法分析
Jul 20 #Python
Django rest framework工具包简单用法示例
Jul 20 #Python
Django 中使用流响应处理视频的方法
Jul 20 #Python
Python实现手写一个类似django的web框架示例
Jul 20 #Python
python 实现求解字符串集的最长公共前缀方法
Jul 20 #Python
python实现求两个字符串的最长公共子串方法
Jul 20 #Python
You might like
如何做到多笔资料的同步
2006/10/09 PHP
php中目录,文件操作详谈
2007/03/19 PHP
javascript+php实现根据用户时区显示当地时间的方法
2015/03/11 PHP
如何解决PHP无法实现多线程的问题
2015/09/25 PHP
php实现的简单中文验证码功能示例
2017/01/03 PHP
javascript 构造函数强制调用经验总结
2012/12/02 Javascript
Javascript模块化编程(一)模块的写法最佳实践
2013/01/17 Javascript
在JavaScript里防止事件函数高频触发和高频调用的方法
2014/09/06 Javascript
js仿3366小游戏选字游戏
2016/04/14 Javascript
收集前端面试题之url、href、src
2018/03/22 Javascript
详解vue中点击空白处隐藏div的实现(用指令实现)
2018/04/19 Javascript
微信小程序模拟cookie的实现
2018/06/20 Javascript
vue表单自定义校验规则介绍
2018/08/28 Javascript
npm配置国内镜像资源+淘宝镜像的方法
2018/09/07 Javascript
页面内锚点定位及跳转方法总结(推荐)
2019/04/24 Javascript
JavaScript定时器设置、使用与倒计时案例详解
2019/07/08 Javascript
微信小程序自定义纯净模态框(弹出框)的实例代码
2020/03/09 Javascript
[59:32]Liquid vs Fnatic 2019国际邀请赛淘汰赛败者组BO1 8.20.mp4
2020/07/19 DOTA
用Python程序抓取网页的HTML信息的一个小实例
2015/05/02 Python
用Python写飞机大战游戏之pygame入门(4):获取鼠标的位置及运动
2015/11/05 Python
通过Python实现自动填写调查问卷
2017/09/06 Python
Python3.4编程实现简单抓取爬虫功能示例
2017/09/14 Python
Django media static外部访问Django中的图片设置教程
2020/04/07 Python
Keras 加载已经训练好的模型进行预测操作
2020/06/17 Python
关于.NET, HTML的五个问题
2012/08/29 面试题
UDP协议功能
2013/01/06 面试题
AJAX都有哪些有点和缺点
2012/11/03 面试题
护理个人求职信范文
2014/01/08 职场文书
小学毕业寄语大全
2014/04/03 职场文书
公司投资建议书
2014/05/16 职场文书
2014年小学教师工作自我评价
2014/09/22 职场文书
家属慰问信
2015/02/14 职场文书
2015年小学辅导员工作总结
2015/05/27 职场文书
60条职场经典语录,总有一条能触动你的心
2019/08/21 职场文书
浅谈PHP7中的一些小技巧
2021/05/29 PHP
浅析Python中的随机采样和概率分布
2021/12/06 Python