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.pswp.cn/news/452757.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/452757.shtml
英文地址,請注明出處:http://en.pswp.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 #不用一層層退出 直接退出整個…