從乙個例項學習 FLASK WTF

2022-03-30 05:00:48 字數 4070 閱讀 4740

本案例通過實現乙個註冊頁面的編寫,來帶你了解flask-wtf的運用.

主要功能為表單基礎的功能--手機號碼必須為11位數,且通過資料庫查詢不能有已經註冊的了,密碼要求輸入兩遍且必須一樣,且所有內容不能為空的提示等內容.那麼現在就開始把!

一.建立表單類.

首先運用flask-wtf你必須確保你的環境中已經安裝wtf,如果你是python3的環境,我們可以通過 pip3 install flask-wtf 來進行安裝.

安裝好了之後我們來進行匯入:    

from flask_wtf import

form

from wtforms import

stringfield, submitfield, passwordfield, validationerror

from wtforms.validators import

datarequired, equalto, length

from models import user

讓我們一步步來理解!!

第一行**我們從 falsk-wtf 中匯入了 form 類,以後我們建立的所有表單類都要繼承自這個類.

第二行**我們從 wtforms  中匯入了 stringfield,submitfield,passwordfield,validationerror ,那麼這些東西是用來幹什麼的呢?我相信如果稍微過一些html的人應該都認識html表單中元素的type="text",type="submit",type="password"這類屬性吧.原理是一樣的.

第三行**我們又從 wtforms.validators 中匯入了 datarequired,equalto,length ,其中 datarequired用來驗證表單資料不能為空, equalto 常用來比較兩個**是不是相等, length 用來限制字元長度.

第四行**是匯入資料庫模型的user類,用來查詢資料庫中是不是已經註冊了手機號.如果已經註冊了,再用第二行**的 validationerror 來丟擲警告.

例項如下:      

class

regist(form):

phone = stringfield("

請輸入手機號

", validators=[datarequired(), length(min=11, max=11, message="

手機號碼是11位數

")])

name = stringfield("

請輸入使用者名稱

", validators=[datarequired()])

password = passwordfield("

請輸入密碼

", validators=[datarequired()])

password1 = passwordfield("

請重複密碼

", validators=[datarequired(), equalto("

password

", "

密碼必須一樣

")])

submit = submitfield("

立即提交")

defvalidate_phone(self, field):

if user.query.filter_by(phone=field.data).first():

raise validationerror("

傻子,你的手機號碼被註冊了!!

")

如此乙個登錄檔單類就建立成功了!!

二.檢視函式中編寫邏輯

我先直接把**列出來:     

#

註冊介面

/regist/

", methods=["

get", "

post"])

defregist():

form =regist()

ifform.validate_on_submit():

telephone =form.phone.data

username =form.name.data

password =form.password.data

ifform.validate_phone():

user = user(phone=telephone, name=username, password=password)

db.session.add(user)

db.session.commit()

return redirect(url_for("

login"))

else

:       

return render_template("

regist.html

", form=form)

我們先用  form=regist() 例項化乙個表單類的物件,後面緊跟著乙個條件語句, validate_on_submit 意思是判斷表單內的資料是不是為空,最大長度是不是....等先前設定的限制條件以及判斷表單內容是不是提交過了.如果是,那麼就意味著我們提交了表單資料,並且進行後面的操作,如果不是.就意味著我們只是開啟了這個註冊頁面,用 return render_template("

regist.html

", form=form)  渲染模板,並且把例項化的物件form作為引數傳遞到模板中.

我們接著繼續提交表單後的**理解 telephone = form.phone.data    username = form.name.data   password = form.password.data

這三行**是獲取使用者填寫的手機號,使用者名稱,密碼這些資料.

獲取之後,我們在進行判斷.呼叫登錄檔單類的validate_phone()函式,如果忘記內容可以再看看上面.如果為true,就代表著這個手機號沒有被註冊,繼續進行後面的把使用者填寫的資料存進資料庫的操作.

user = user(phone=telephone, name=username, password=password)

這段**的意思是user使用者表中有phone,name,password的屬性.我們把獲取的使用者資料telephone,username,password賦值給它,在通過 db.session.add(user) db.session.commit() 這兩行**提交到資料庫中.

資料庫中是用到了flask-sqlalchemy,這裡不做具體講解,以後有機會再講.我把**貼出來:         

lass

user(db.model):

__tablename__="

user

"id=db.column(db.integer,primary_key=true,autoincrement=true)

phone=db.column(db.string(11),nullable=false)

name=db.column(db.string(50),nullable=false)

password=db.column(db.string(100),nullable=false)

三.在模板中運用

第三步也是最後一步.如果你的專案運用了flask-bootstrap的話,可以通過:         

<

form

action

=""method

="post"

>

}form

>

wtf.quick_form(form)直接生成表單,是不是很方便?當然沒有樣式,如果你要新增樣式的話可以這樣:        

<

form

method

="post"

>

}            } }

}form

>

好了,到這裡就結束了.如果你把這些全弄懂了,你還可以直接閱讀它的中文文件. 

待續..........

從乙個例項中學習DTW演算法

dtw為 dynamic time warping,動態時間歸準 的簡稱。應用很廣,主要是在模板匹配中,比如說用在孤立詞語音識別,計算機視覺中的行為識別,資訊檢索等中。可能大家學過這些類似的課程都看到過這個演算法,公式也有幾個,但是很抽象,當時看懂了但不久就會忘記,因為沒有具體的例項來加深印象。這次...

從乙個例項,一窺docker程序管理

在docker中,程序管理的基礎是linux核心的pid命名空間技術。在不同的pid命名空間下,可以有相同的pid。linux核心為所有的pid命名空間維護了乙個樹狀的資料結構,最頂層是系統初始化時建立的root namespace 根命名空間 父節點可以看到子節點中的程序,並可以通過訊號等方式對子...

例項022多個類從乙個類繼承

module module1 public class 人員 private pname as string public property name as string getreturn pname end get set byval value as string pname name end...