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文件操作整理汇总
Oct 21 Python
Python实现线程池代码分享
Jun 21 Python
python生成器,可迭代对象,迭代器区别和联系
Feb 04 Python
Python使用Scrapy爬虫框架全站爬取图片并保存本地的实现代码
Mar 04 Python
PyCharm+PySpark远程调试的环境配置的方法
Nov 29 Python
在pyqt5中QLineEdit里面的内容回车发送的实例
Jun 21 Python
详解python中的模块及包导入
Aug 30 Python
Python开发企业微信机器人每天定时发消息实例
Mar 17 Python
浅谈numpy中函数resize与reshape,ravel与flatten的区别
Jun 18 Python
Python dict的常用方法示例代码
Jun 23 Python
windows下python 3.9 Numpy scipy和matlabplot的安装教程详解
Nov 28 Python
Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)
Dec 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
php 什么是PEAR?
2009/03/19 PHP
浅析get与post的一些特殊情况
2014/07/28 PHP
apache和PHP如何整合在一起
2015/10/12 PHP
yii分页组件用法实例分析
2015/12/28 PHP
PHP的重载使用魔术方法代码实例详解
2021/02/26 PHP
js中几种去掉字串左右空格的方法
2006/12/25 Javascript
javascript while语句和do while语句的区别分析
2007/12/08 Javascript
js本身的局限性 别让javascript做太多事
2010/03/23 Javascript
jQuery.ajax 用户登录验证代码
2010/10/29 Javascript
发布一个基于javascript的动画类 Fx.js
2010/11/05 Javascript
jquery中 $.expr使用实例介绍
2014/06/09 Javascript
JS获得选取checkbox整行数据的方法
2015/01/28 Javascript
Vuex简单入门
2017/04/19 Javascript
Angular使用 ng-img-max 调整浏览器中的图片的示例代码
2017/08/17 Javascript
vue组件实现弹出框点击显示隐藏效果
2020/10/26 Javascript
vue如何将v-for中的表格导出来
2018/05/07 Javascript
[43:36]Liquid vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python正则表达式判断字符串是否是全部小写示例
2013/12/25 Python
利用python3随机生成中文字符的实现方法
2017/11/24 Python
pycharm+django创建一个搜索网页实例代码
2018/01/24 Python
用vue.js组件模拟v-model指令实例方法
2019/07/05 Python
pytorch打印网络结构的实例
2019/08/19 Python
Python的缺点和劣势分析
2019/11/19 Python
Django接收照片储存文件的实例代码
2020/03/07 Python
python中_del_还原数据的方法
2020/12/09 Python
Spartoo美国:欧洲排名第一的在线时装零售商
2019/12/12 全球购物
综合测评自我鉴定
2013/10/08 职场文书
仓库管理专业个人自我评价范文
2013/11/11 职场文书
客户表扬信范文
2014/01/10 职场文书
课前一分钟演讲稿
2014/08/26 职场文书
2014幼儿园家长工作总结
2014/11/10 职场文书
2015年度物流工作总结
2015/04/30 职场文书
2015年学校教科室工作总结
2015/07/20 职场文书
运动会加油稿30字
2015/07/21 职场文书
CSS3 制作的书本翻页特效
2021/04/13 HTML / CSS
Win10服务主机占用内存怎么办?Win10服务主机进程占用大量内存解决方法
2022/09/23 数码科技