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实现的径向基(RBF)神经网络示例
Feb 06 Python
Python装饰器用法实例总结
May 26 Python
python中copy()与deepcopy()的区别小结
Aug 03 Python
python多线程+代理池爬取天天基金网、股票数据过程解析
Aug 13 Python
python写入数据到csv或xlsx文件的3种方法
Aug 23 Python
详解Python 字符串相似性的几种度量方法
Aug 29 Python
使用Python爬虫库requests发送表单数据和JSON数据
Jan 25 Python
TensorFlow学习之分布式的TensorFlow运行环境
Feb 05 Python
Python终端输出彩色字符方法详解
Feb 11 Python
python Tornado框架的使用示例
Oct 19 Python
Python机器学习应用之工业蒸汽数据分析篇详解
Jan 18 Python
Python Flask实现进度条
May 11 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
JS+PHP实现用户输入数字后显示最大的值及所在位置
2017/06/19 PHP
PHP实现的分解质因数操作示例
2018/08/01 PHP
基于PHP+mysql实现新闻发布系统的开发
2020/08/06 PHP
js+css使DIV始终居于屏幕中间 左下 左上 右上 右下的代码集合
2011/03/10 Javascript
让你的博客飘雪花超出屏幕依然看得见
2013/01/04 Javascript
jquery+css3打造一款ajax分页插件(自写)
2014/06/18 Javascript
在JavaScript中构建ArrayList示例代码
2014/09/17 Javascript
基于jQuery实现文本框缩放以及上下移动功能
2014/11/24 Javascript
jquery实现上下左右滑动的方法
2015/02/09 Javascript
基于JavaScript代码实现微信扫一扫下载APP
2015/12/30 Javascript
浅谈JavaScript的全局变量与局部变量
2016/06/10 Javascript
在javascript中使用com组件的简单实现方法
2016/08/17 Javascript
Node.js下自定义错误类型详解
2016/10/17 Javascript
浅谈angularjs依赖服务注入写法的注意点
2017/04/24 Javascript
JQuery 封装 Ajax 常用方法(推荐)
2017/05/21 jQuery
nodejs中解决异步嵌套循环和循环嵌套异步的问题
2017/07/12 NodeJs
微信小程序时间选择插件使用详解
2018/12/28 Javascript
JavaScript提升机制Hoisting详解
2019/10/23 Javascript
jquery实现垂直手风琴导航栏
2020/02/18 jQuery
JavaScript日期库date-fn.js使用方法解析
2020/09/09 Javascript
Python操作列表的常用方法分享
2014/02/13 Python
python实现的简单FTP上传下载文件实例
2015/06/30 Python
Python md5与sha1加密算法用法分析
2017/07/14 Python
Python3读取Excel数据存入MySQL的方法
2018/05/04 Python
pyqt5与matplotlib的完美结合实例
2019/06/21 Python
python绘制已知点的坐标的直线实例
2019/07/04 Python
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
2019/09/17 Python
python实现KNN分类算法
2019/10/16 Python
django框架两个使用模板实例
2019/12/11 Python
Crocs卡骆驰洞洞鞋日本官方网站:Crocs日本
2016/08/25 全球购物
巴西最好的男鞋:Rafarillo
2018/05/25 全球购物
中餐厅主管的职责范文
2014/02/04 职场文书
经典洗发水广告词
2014/03/13 职场文书
医院标语大全
2014/06/23 职场文书
我的中国梦演讲稿400字
2014/08/19 职场文书
法制教育演讲稿
2014/09/10 职场文书