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对字典进行排序实例
Sep 25 Python
Python内置函数delattr的具体用法
Nov 23 Python
Python实现动态图解析、合成与倒放
Jan 18 Python
浅谈Python实现2种文件复制的方法
Jan 19 Python
浅谈dataframe中更改列属性的方法
Jul 10 Python
在unittest中使用 logging 模块记录测试数据的方法
Nov 30 Python
Python 读取串口数据,动态绘图的示例
Jul 02 Python
关于pymysql模块的使用以及代码详解
Sep 01 Python
python 字符串常用函数详解
Sep 11 Python
Python列表如何更新值
May 27 Python
PyQt QMainWindow的使用示例
Mar 24 Python
Python可变集合和不可变集合的构造方法大全
Dec 06 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
模仿OSO的论坛(三)
2006/10/09 PHP
人脸识别测颜值、测脸龄、测相似度微信接口
2016/04/07 PHP
php命名空间设计思想、用法与缺点分析
2019/07/17 PHP
ExtJS GridPanel 根据条件改变字体颜色
2010/03/08 Javascript
基于jQuery的图片剪切插件
2011/08/03 Javascript
浅析javascript的间隔调用和延时调用
2014/11/12 Javascript
javascript实现判断鼠标的状态
2015/07/10 Javascript
js绘制圆形和矩形的方法
2015/08/05 Javascript
JS基础随笔(菜鸟必看篇)
2016/07/13 Javascript
全面了解构造函数继承关键apply call
2016/07/26 Javascript
JavaScript使用键盘输入控制实现数字验证功能
2016/08/19 Javascript
jQuery中值得注意的trigger方法浅析
2016/12/12 Javascript
javascript输出AscII码扩展集中的字符方法
2016/12/26 Javascript
详解vue 命名视图
2019/08/14 Javascript
jquery 遍历hash操作示例【基于ajax交互】
2019/10/12 jQuery
python类继承用法实例分析
2015/05/27 Python
python实现搜索本地文件信息写入文件的方法
2016/02/22 Python
python正则表达式及使用正则表达式的例子
2018/01/22 Python
利用python GDAL库读写geotiff格式的遥感影像方法
2018/11/29 Python
Python给图像添加噪声具体操作
2019/03/03 Python
在macOS上搭建python环境的实现方法
2019/08/13 Python
Python统计分析模块statistics用法示例
2019/09/06 Python
Python经纬度坐标转换为距离及角度的实现
2020/11/01 Python
python爬虫scrapy基于CrawlSpider类的全站数据爬取示例解析
2021/02/20 Python
HTML5 本地存储和内容按需加载的思路和方法
2011/04/07 HTML / CSS
德国百年厨具品牌WMF美国站:WMF美国
2016/09/12 全球购物
波兰多品牌运动商店:StreetStyle24.pl
2020/09/22 全球购物
EJB实例的生命周期
2016/10/28 面试题
外贸业务员求职自荐信分享
2013/09/21 职场文书
职高毕业生自我鉴定
2013/10/21 职场文书
文明风采获奖感言
2014/02/18 职场文书
餐厅销售主管职责范本
2014/02/19 职场文书
1亿有多大教学反思
2014/05/01 职场文书
企业员工辞职信范文
2015/05/12 职场文书
2019新学期家长会工作计划
2019/08/21 职场文书
vue postcss-px2rem 自适应布局
2022/05/15 Vue.js