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中的__new__与__init__魔术方法理解笔记
Nov 08 Python
基于python爬虫数据处理(详解)
Jun 10 Python
Python实现按学生年龄排序的实际问题详解
Aug 29 Python
python之virtualenv的简单使用方法(必看篇)
Nov 25 Python
500行Python代码打造刷脸考勤系统
Jun 03 Python
python numpy之np.random的随机数函数使用介绍
Oct 06 Python
Python 使用 environs 库定义环境变量的方法
Feb 25 Python
python 解决Windows平台上路径有空格的问题
Nov 10 Python
Django URL参数Template反向解析
Nov 24 Python
Python爬虫进阶之爬取某视频并下载的实现
Dec 08 Python
超级详细实用的pycharm常用快捷键
May 12 Python
python flappy bird小游戏分步实现流程
Feb 15 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
模拟xcopy的函数
2006/10/09 PHP
apache mysql php 源码编译使用方法
2012/05/03 PHP
php将数组转换成csv格式文件输出的方法
2015/03/14 PHP
PHP简单实现HTTP和HTTPS跨域共享session解决办法
2015/05/27 PHP
PHP使用strstr()函数获取指定字符串后所有字符的方法
2016/01/07 PHP
PHP实现原比例生成缩略图的方法
2016/02/03 PHP
Zend Framework框架路由机制代码分析
2016/03/22 PHP
php中加密解密DES类的简单使用方法示例
2020/03/26 PHP
深入理解jQuery中live与bind方法的区别
2013/12/18 Javascript
浅谈js中变量初始化
2015/02/03 Javascript
nodejs爬虫抓取数据乱码问题总结
2015/07/03 NodeJs
jQuery的promise与deferred对象在异步回调中的作用
2016/05/03 Javascript
详细分析Javascript中创建对象的四种方式
2016/08/17 Javascript
JavaScript实现的选择排序算法实例分析
2017/04/14 Javascript
利用node.js本地搭建HTTP服务器
2017/04/19 Javascript
jQuery实现基本淡入淡出效果的方法详解
2018/09/05 jQuery
JavaScript常见事件对象与操作实例总结
2019/01/05 Javascript
js中的this的指向问题详解
2019/08/29 Javascript
ES6学习教程之Promise用法详解
2020/11/22 Javascript
vue图片裁剪插件vue-cropper使用方法详解
2020/12/16 Vue.js
[01:56]《DOTA2》中文配音CG
2013/04/22 DOTA
python实现linux下使用xcopy的方法
2015/06/28 Python
Python基于回溯法子集树模板解决取物搭配问题实例
2017/09/02 Python
Python实现定期检查源目录与备份目录的差异并进行备份功能示例
2019/02/27 Python
python实现趣味图片字符化
2019/04/30 Python
python实现在函数图像上添加文字和标注的方法
2019/07/08 Python
Python selenium 自动化脚本打包成一个exe文件(推荐)
2020/01/14 Python
使用Python matplotlib作图时,设置横纵坐标轴数值以百分比(%)显示
2020/05/16 Python
浅谈tensorflow模型保存为pb的各种姿势
2020/05/25 Python
购买中国最好的电子产品:Geekbuying
2018/03/13 全球购物
房务中心文员岗位职责
2014/04/16 职场文书
机械设计制造及其自动化专业求职信
2014/06/17 职场文书
考试保密承诺书
2014/08/30 职场文书
求职简历自我评价2015
2015/03/10 职场文书
宾馆客房管理制度
2015/08/06 职场文书
Java 超详细讲解十大排序算法面试无忧
2022/04/08 Java/Android