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实现二叉堆
Feb 03 Python
Python内置函数delattr的具体用法
Nov 23 Python
python实现定时自动备份文件到其他主机的实例代码
Feb 23 Python
python自动化报告的输出用例详解
May 30 Python
pandas将多个dataframe以多个sheet的形式保存到一个excel文件中
Oct 10 Python
python实现修改固定模式的字符串内容操作示例
Dec 30 Python
python读取csv文件指定行的2种方法详解
Feb 13 Python
pandas分批读取大数据集教程
Jun 06 Python
如何解决pycharm调试报错的问题
Aug 06 Python
python 多线程共享全局变量的优劣
Sep 24 Python
python数据抓取3种方法总结
Feb 07 Python
python中Pyqt5使用Qlabel标签播放视频
Apr 22 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/11/16 PHP
php mysql 判断update之后是否更新了的方法
2012/01/10 PHP
介绍一些PHP判断变量的函数
2012/04/24 PHP
xml在joomla表单中的应用详解分享
2012/07/19 PHP
php数组转成json格式的方法
2015/03/09 PHP
浅谈PHP值mysql操作类
2016/06/29 PHP
CI框架中类的自动加载问题分析
2016/11/21 PHP
php 中奖概率算法实现代码
2017/01/25 PHP
CI(CodeIgniter)框架实现图片上传的方法
2017/03/24 PHP
js一组验证函数
2008/12/20 Javascript
禁止iframe脚本弹出的窗口覆盖了父窗口的方法
2014/09/06 Javascript
js与css实现弹出层覆盖整个页面的方法
2014/12/13 Javascript
AngularJS解决ng界面长表达式(ui-set)的方法分析
2016/11/07 Javascript
jQuery回调方法使用示例
2017/06/26 jQuery
JS实现字符串去重及数组去重的方法示例
2018/04/21 Javascript
webpack打包nodejs项目的方法
2018/09/26 NodeJs
vue prop属性传值与传引用示例
2019/11/13 Javascript
javascript实现时钟动画
2020/12/03 Javascript
原生JavaScript实现幻灯片效果
2021/02/19 Javascript
Python求两个文本文件以行为单位的交集、并集与差集的方法
2015/06/17 Python
python 获取字符串MD5值方法
2018/05/29 Python
使用python爬取B站千万级数据
2018/06/08 Python
python获取微信企业号打卡数据并生成windows计划任务
2019/04/30 Python
python自动化测试之DDT数据驱动的实现代码
2019/07/23 Python
Python获取时间戳代码实例
2019/09/24 Python
pycharm部署、配置anaconda环境的教程
2020/03/24 Python
pandas dataframe 中的explode函数用法详解
2020/05/18 Python
Python浮点型(float)运算结果不正确的解决方案
2020/09/22 Python
python中not、and和or的优先级与详细用法介绍
2020/11/03 Python
IE支持HTML5的解决方法
2009/10/20 HTML / CSS
尼克松手表官网:Nixon手表
2019/03/17 全球购物
销售经理工作职责范文
2013/12/03 职场文书
印刷技术专业自荐信
2014/09/18 职场文书
关于分班的感言
2015/08/04 职场文书
JS新手入门数组处理的实用方法汇总
2021/04/07 Javascript
详解Golang如何优雅的终止一个服务
2022/03/21 Golang