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字符串连接的N种方式总结
Sep 17 Python
python网络编程实例简析
Sep 26 Python
Python中isnumeric()方法的使用简介
May 19 Python
基于Python实现一个简单的银行转账操作
Mar 06 Python
Python MD5加密实例详解
Aug 02 Python
python脚本生成caffe train_list.txt的方法
Apr 27 Python
python 获取utc时间转化为本地时间的方法
Dec 31 Python
详解Python3除法之真除法、截断除法和下取整对比
May 23 Python
Django 批量插入数据的实现方法
Jan 12 Python
基于python的opencv图像处理实现对斑马线的检测示例
Nov 29 Python
python如何修改文件时间属性
Feb 05 Python
Python实现自动玩连连看的脚本分享
Apr 04 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
Terran魔法科技
2020/03/14 星际争霸
解析Extjs与php数据交互(增删查改)
2013/06/25 PHP
php使用pack处理二进制文件的方法
2014/07/03 PHP
PHP多维数组排序array详解
2017/11/21 PHP
统一接口:为FireFox添加IE的方法和属性的js代码
2007/03/25 Javascript
Extjs优化(一)删除冗余代码提高运行速度
2013/04/15 Javascript
在javaScript中关于submit和button的区别介绍
2013/10/20 Javascript
javascript中数组的冒泡排序使用示例
2013/12/18 Javascript
JQuery each()嵌套使用小结
2014/04/18 Javascript
JS设置cookie、读取cookie、删除cookie
2015/04/17 Javascript
jQuery固定元素插件scrolltofixed使用指南
2015/04/21 Javascript
JS中生成随机数的用法及相关函数
2016/01/09 Javascript
EasyUI学习之Combobox下拉列表(1)
2016/12/29 Javascript
利用jQuery实现滑动开关按钮效果(附demo源码下载)
2017/02/07 Javascript
分析javascript中9 个常见错误阻碍你进步
2017/09/18 Javascript
浅析node Async异步处理模块用例分析及常用方法介绍
2017/11/17 Javascript
vue + axios get下载文件功能
2019/09/25 Javascript
Vue使用NProgress的操作过程解析
2019/10/10 Javascript
Python程序设计入门(5)类的使用简介
2014/06/16 Python
python入门之语句(if语句、while语句、for语句)
2015/01/19 Python
python里使用正则的findall函数的实例详解
2017/10/19 Python
python基础学习之如何对元组各个元素进行命名详解
2018/07/12 Python
python检测文件夹变化,并拷贝有更新的文件到对应目录的方法
2018/10/17 Python
kali中python版本的切换方法
2019/07/11 Python
安装PyInstaller失败问题解决
2019/12/14 Python
python统计文章中单词出现次数实例
2020/02/27 Python
Python如何在main中调用函数内的函数方式
2020/06/01 Python
Python3自带工具2to3.py 转换 Python2.x 代码到Python3的操作
2021/03/03 Python
英国网络托管和域名领导者:Web Hosting UK
2017/10/15 全球购物
澳大利亚玩具剧场:Toy Playhouse
2019/03/03 全球购物
生物制药专业自我鉴定
2014/02/19 职场文书
党员十八大心得体会
2014/09/12 职场文书
共产党员批评与自我批评
2014/10/15 职场文书
民主评议党员登记表自我评价
2014/10/20 职场文书
Oracle 临时表空间SQL语句的实现
2021/09/25 Oracle
简单聊聊Vue中的计算属性和属性侦听
2021/10/05 Vue.js