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通过urllib2获取带有中文参数url内容的方法
Mar 13 Python
Python+django实现文件上传
Jan 17 Python
python如何在终端里面显示一张图片
Aug 17 Python
火车票抢票python代码公开揭秘!
Mar 08 Python
使用Python处理BAM的方法
Sep 28 Python
详解Python连接MySQL数据库的多种方式
Apr 16 Python
python爬取Ajax动态加载网页过程解析
Sep 05 Python
pytorch绘制并显示loss曲线和acc曲线,LeNet5识别图像准确率
Jan 02 Python
PyTorch-GPU加速实例
Jun 23 Python
python 实现学生信息管理系统的示例
Nov 28 Python
基于python+selenium自动健康打卡的实现代码
Jan 13 Python
python中取整数的几种方法
Nov 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
dhtmlxTree目录树增加右键菜单以及拖拽排序的实现方法
2013/04/26 PHP
Eclipse的PHP插件PHPEclipse安装和使用
2014/07/20 PHP
为百度UE编辑器上传图片添加水印功能
2015/04/16 PHP
详解php魔术方法(Magic methods)的使用方法
2016/02/14 PHP
Yii2中如何使用modal弹窗(基本使用)
2016/05/30 PHP
PHP使用标准库spl实现的观察者模式示例
2018/08/04 PHP
PHP getNamespaces()函数讲解
2019/02/03 PHP
JS(jQuery)实现聊天接收到消息语言自动提醒功能详解【提示“您有新的消息请注意查收”】
2019/04/16 PHP
XRegExp 0.2: Now With Named Capture
2007/11/30 Javascript
JavaScript实现存储HTML字符串示例
2014/04/21 Javascript
基于JavaScript判断浏览器到底是关闭还是刷新(超准确)
2016/02/01 Javascript
JavaScript中的跨浏览器事件操作的基本方法整理
2016/05/20 Javascript
jQuery简单注册和禁用全局事件的方法
2016/07/25 Javascript
ionic2 tabs使用 Modal底部tab弹出框
2016/12/30 Javascript
jQuery验证表单格式的使用方法
2017/01/10 Javascript
微信小程序(六):列表上拉加载下拉刷新示例
2017/01/13 Javascript
js判断手机号是否正确并返回的实现代码
2017/01/17 Javascript
easy ui datagrid 从编辑框中获取值的方法
2017/02/22 Javascript
微信小程序搭建自己的Https服务器
2019/05/02 Javascript
vue+element模态框中新增模态框和删除功能
2019/06/11 Javascript
基于Ionic3实现选项卡切换并重新加载echarts
2020/09/24 Javascript
Python如何实现守护进程的方法示例
2017/02/08 Python
Python爬取网页中的图片(搜狗图片)详解
2017/03/23 Python
Python功能点实现:函数级/代码块级计时器
2019/01/02 Python
python 遍历pd.Series的index和value
2019/11/26 Python
python线程信号量semaphore使用解析
2019/11/30 Python
详解从Django Allauth中进行登录改造小结
2019/12/18 Python
Python爬虫程序架构和运行流程原理解析
2020/03/09 Python
HTML5 新表单类型示例代码
2018/03/20 HTML / CSS
奥地利汽车配件店:Pkwteile.at
2017/03/10 全球购物
怎样在 Applet 中建立自己的菜单(MenuBar/Menu)?
2012/06/20 面试题
生产部统计员岗位职责
2014/01/05 职场文书
报社实习生自荐信
2014/01/24 职场文书
竞选班委演讲稿
2014/04/28 职场文书
优秀教师先进事迹材料
2014/12/15 职场文书
Python干货实战之八音符酱小游戏全过程详解
2021/10/24 Python