Flask WTForm表单的使用

运行环境:

python2.7

flask  0.11

flask-wtf  0.14.2

wtform能够通过一个类定义一些字段,这些字段会在前端生成标签,并且通过设置字段的验证规则,自动判断前端输入数据的格式。

一般用于用户登录,用户注册等信息录入。

 

 1 from wtforms import Form
 2 from flask import Flask,render_template,request,redirect
 3 from wtforms.fields import core
 4 from wtforms.fields import html5
 5 from wtforms.fields import  simple
 6 from wtforms import validators
 7 from wtforms import widgets
 8 import sys
 9 reload(sys)
10 sys.setdefaultencoding('utf8')
11 #python2.7 转码用的,避免显示中文为乱码
12 
13 
14 app = Flask(__name__,template_folder='templates')
15 app.debug=True
16 
17 class LoginForm(Form):
18     name = simple.StringField(
19         label='用户名',   #前端显示中文
20         validators=[
21             validators.DataRequired(message='用户名不能为空'),
22             validators.Length(min=6,max=18,message='用户名长度必须大于%(min)d且小于%(max)d')
23         ],    #字段的验证规则
24         widget=widgets.TextInput(), #页面上显示的标签
25         render_kw={'class':'form=control'} #给上面插件生成的时候添加属性,比如bootstrap的属性
26     )
27     pwd = simple.PasswordField(
28         label='密码',
29         validators=[
30             validators.DataRequired(message='密码不能为空'),
31             validators.Length(min=8,message='用户名长度必须大于%(min)d'),
32             validators.Regexp(regex="^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*/&]{8,}",
33                               message='密码至少8个字符,至少1个大写字母,1个小写字母'),
34 
35         ],
36         widget=widgets.PasswordInput(),
37         render_kw={'class':'from-control'}
38     )
39 #字段,内部包含正则表达式
40 
41 @app.route('/login',methods=['GET','POST'])
42 def login():
43     if request.method == 'GET':
44         form = LoginForm()
45         return render_template('login.html',form=form)
46         #将form对象传给前端
47     else:
48         form = LoginForm(formdata=request.form)  #从请求体from中取值
49         if form.validate():   #验证
50             print "用户提交数据通过,提交的值为:",form.data
51         else:
52             print form.errors    #错误信息
53         return render_template('login.html',form=form)
54 
55 
56 
57 @app.route('/')
58 def hello_world():
59     return 'Hello World!'
60 
61 
62 if __name__ == '__main__':
63     app.run()

 

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <meta http-equiv="x-ua-compatible" content="IE=edge">
 6     <meta name="viewport" content="width=device-width, initial-scale=1">
 7     <title>Title</title>
 8 </head>
 9 <body>
10 <h1>登陆</h1>
11 <form method="post">
12     <p>{{ form.name.label }}  {{ form.name }} {{ form.name.errors[0] }}</p>
13     <p>{{ form.pwd.label }}  {{ form.pwd }} {{ form.pwd.errors[0] }}</p>
14     <input type="submit" value="提交">
15 </form>
16 </body>
17 </html>

在前端,直接通过Form对象来取字段中的值,以及该值中的错误信息,错误信息我们一般取第一个即可,已经能够告诉用户信息错误了。

 

转载于:https://www.cnblogs.com/ArmoredTitan/p/9005864.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452757.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java与C#个人之比较

网上这方面的比较文章已经有不少了&#xff0c;不过大都是要么从很高的角度说的&#xff0c;要么就是从底层说的&#xff0c;本人就以自己这几年的编程经历中的感受&#xff0c;来谈谈自己的体会。 相似性&#xff1a; Java和C#都是一门面向对象的语言&#xff0c;Java更多地…

java利用子类求正方形_Java程序设计实验2011

(2)掌握对象的声明和使用&#xff1b;(3)掌握构造方法的概念和使用&#xff1b;(4)掌握类及成员的访问控制符。2、实验任务(1)阅读下面的程序&#xff0c;在main()方法里添加语句完成如下的功能&#xff1a;①创建一个MyV alue类的对象myV alue。②为myV alue对象中的value域赋…

当导用模块与包的import与from的问题(模块与包的调用)

当在views.py里写impor models会不会报错呢&#xff1f; 1、Python里面的py文件都是每一行的代码。2、Python解释器去找一个模块的时候&#xff0c;只去sys.path的路径里找3、django项目启动&#xff08;django项目的启动文件是manage.py&#xff09;启动项目是将manage.py的路…

ack和seq

ACK (Acknowledgement&#xff09;&#xff0c;即确认字符&#xff0c;在数据通信中&#xff0c;接收站发给发送站的一种传输类控制字符。表示发来的数据已确认接收无误。 seq是序列号&#xff0c;这是为了连接以后传送数据用的&#xff0c;ack是对收到的数据包的确认&#xff…

MySQL中的information_schema

0.引言 近日在学习网络安全的sql注入时&#xff0c;用到mysql中的information_schema数据库&#xff0c;其思路是利用information_schema中的SCHEMA获取数据库中的table名称。现在对相关数据库进行总结&#xff0c;方便以后复习使用。 2.information_schema数据库 informati…

linux配置防火墙,开启端口

linux配置防火墙&#xff0c;开启端口 Centos7,配置防火墙&#xff0c;开启端口  1.查看已开放的端口(默认不开放任何端口)    firewall-cmd --list-ports  2.开启80端口    firewall-cmd --zonepublic(作用域) --add-port80/tcp(端口和访问类型) --permanent(永久…

使用Intel编译器系列合集

好的帖子&#xff1a;http://topic.csdn.net/u/20080327/16/071b45df-3795-4bf1-9c4d-da4eb5aaa739.html参考手册&#xff1a;http://software.intel.com/sites/products/documentation/studio/composer/en-us/2011Update/compiler_c/index.htm 说明&#xff1a;本系列文章为个…

【前端】这可能是你看过最全的css居中解决方案了~

1.水平居中&#xff1a;行内元素解决方案 适用元素&#xff1a;文字&#xff0c;链接&#xff0c;及其其它inline或者inline-*类型元素&#xff08;inline-block&#xff0c;inline-table&#xff0c;inline-flex&#xff09; html部分代码:<div>文字元素</div><…

java手机一款三国游戏_JAVA热游—富甲三国之雄霸天下原创心得

因为工作忙碌的关系&#xff0c;很长时间都没有来关注手机游戏论坛&#xff0c;这款富甲三国.雄霸天下&#xff0c;我也是前天才拿到手。游戏比想象中的简单&#xff0c;个人仅用了两个小时时间&#xff0c;就将三个人物全部通关。游戏的开始画面制作得比较精美&#xff0c;而且…

Python多线程--互斥锁、死锁

1、互斥锁 为解决资源抢夺问题&#xff0c;使用mutex Threading.Lock()创建锁&#xff0c;使用mutex.acquire()锁定&#xff0c;使用mutex.release()释放锁。 代码一&#xff1a; import threading import time# 定义一个全局变量 g_num 0def test1(num):global g_num# 上锁…

freemind 要下载java_Freemind

动手编辑先按Ctrln&#xff0c;新建一个文件。这时出现了一个根节点。用光标单击它&#xff0c;改成“我学FreeMind”&#xff0c;然后在节点之外任一地方点击鼠标(或按Enter)完成编辑。然后&#xff0c;按Insert键&#xff0c;输入“下载安装”&#xff0c;按Enter键&#xff…

本地连不上远程mysql数据库(2)

Host is not allowed to connect to this MySQL server解决方法 今天在ubuntu上面装完MySQL&#xff0c;却发现在本地登录可以&#xff0c;但是远程登录却报错Host is not allowed to connect to this MySQL server,找了半天试了网上的一些方法都没有解决&#xff0c;最终在一篇…

理解EnterCriticalSection 临界区

通俗解释就像上厕所&#xff1a; 门锁了&#xff0c;就等着&#xff0c;等到别人出来了&#xff0c;进去锁上&#xff0c;然后该干什么干什么&#xff0c;干完了&#xff0c;把门打开 门没锁&#xff0c;就进去&#xff0c;锁上&#xff0c;然后该干什么干什么&#xff0c;干…

Python多线程--UDP聊天器

import socket import threadingdef recv_msg(udp_socket):"""接收数据并显示"""# 接收数据while True:recv_data udp_socket.recvfrom(1024)print(recv_data)def send_msg(udp_socket, dest_ip, dest_port):"""发送数据"&…

mvc:default-servlet-handler/作用

<mvc:default-servlet-handler/>使用默认的servlet来相应静态文件&#xff0c;因为在web.xml中使用了DispatcherServlet截获所有的请求url&#xff0c;而引入<scprit type"text/javascript" src"js/jquery-1.11.0.mim.js"/>的时候&#xff0c;…

java中如何做模糊查询_到底Java里的模糊查询语句该怎么写

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼现在String sql"select * from car where carName like %?%";可以查询出结果了&#xff0c;但问题又来了&#xff0c;只能查询出一条结果&#xff0c;代码如下carDao.java页面public ArrayList queryAppoint(String car…

vector 、map 、iterator 之学习笔记

由于本人要接手一项C方面 的工作。由于不会C,不过做过JAVA 以及一些web方面的开发&#xff0c;加之时间比较短。所以需要速成&#xff0c;于是学习笔记也基本都是用代码代替。 //范例资源文件 /****************************************************************************…

redis的密码验证,及哨兵的相关配置

背景我们知道&#xff0c;redis默认是不配置密码的&#xff0c;这就造成只要有redis的IPPort就可以无需验证&#xff0c;登陆redis。如果恰巧你的redis是开放在公网上的&#xff0c;很容易就被******&#xff0c;获取你的系统权限&#xff0c;经常被黑去当成了矿机。redis的安全…

tag的使用

tag True while tag:print("level")choice input("level>>>").strip() #作用是暂停 不会一直死循环if choice "quit":break #终止当前循环进入到上一层if choice "quit_all": tag False #不用一层层退出 直接退出整个…