flask中的wtf表單

Web表單

web表單是web應(yīng)用程序的基本功能。

它是HTML頁面中負(fù)責(zé)數(shù)據(jù)采集的部件别惦。表單有三個部分組成:表單標(biāo)簽狈茉、表單域、表單按鈕掸掸。表單允許用戶輸入數(shù)據(jù)氯庆,負(fù)責(zé)HTML頁面數(shù)據(jù)采集,通過表單將用戶輸入的數(shù)據(jù)提交給服務(wù)器扰付。

在Flask中堤撵,為了處理web表單,我們一般使用Flask-WTF擴(kuò)展羽莺,它封裝了WTForms实昨,并且它有驗(yàn)證表單數(shù)據(jù)的功能

WTForms支持的HTML標(biāo)準(zhǔn)字段

字段對象 說明
StringField 文本字段
TextAreaField 多行文本字段
PasswordField 密碼文本字段
HiddenField 隱藏文件字段
DateField 文本字段,值為 datetime.date 文本格式
DateTimeField 文本字段盐固,值為 datetime.datetime 文本格式
IntegerField 文本字段荒给,值為整數(shù)
DecimalField 文本字段丈挟,值為decimal.Decimal
FloatField 文本字段,值為浮點(diǎn)數(shù)
BooleanField 復(fù)選框志电,值為True 和 False
RadioField 一組單選框
SelectField 下拉列表
SelectMutipleField 下拉列表曙咽,可選擇多個值
FileField 文件上傳字段
SubmitField 表單提交按鈕
FormField 把表單作為字段嵌入另一個表單
FieldList 一組指定類型的字段

WTForms常用驗(yàn)證函數(shù)

驗(yàn)證函數(shù) 說明
DataRequired 確保字段中有數(shù)據(jù)
EqualTo 比較兩個字段的值,常用于比較兩次密碼輸入
Length 驗(yàn)證輸入的字符串長度
NumberRange 驗(yàn)證輸入的值在數(shù)字范圍內(nèi)
URL 驗(yàn)證URL
AnyOf 驗(yàn)證輸入值在可選列表中
NoneOf 驗(yàn)證輸入值不在可選列表中

使用Flask-WTF需要配置參數(shù)SECRET_KEY挑辆。

CSRF_ENABLED是為了CSRF(跨站請求偽造)保護(hù)例朱。 SECRET_KEY用來生成加密令牌,當(dāng)CSRF激活的時候鱼蝉,該設(shè)置會根據(jù)設(shè)置的密匙生成加密令牌洒嗤。在HTML頁面中直接寫form表單:

在HTML頁面中直接寫form表單:

<form method='post'>
    <input type="text" name="username" placeholder='Username'>
    <input type="password" name="password" placeholder='password'>
    <input type="submit">
</form>

使用Flask-WTF實(shí)現(xiàn)表單。

配置參數(shù):

 app.config['SECRET_KEY'] = 'SECRET_KEY'
 # 生成secret_key最簡單的方式
>>> import os
>>> os.urandom(24)
'\xca\x0c\x86\x04\x98@\x02b\x1b7\x8c\x88]\x1b\xd7"+\xe6px@\xc3#\\'

# 設(shè)置方法
app.config['SECRET_KEY'] = '\xca\x0c\x86\x04\x98@\x02b\x1b7\x8c\x88]\x1b\xd7"+\xe6px@\xc3#\\'
# or
app.secret_key = '\xca\x0c\x86\x04\x98@\x02b\x1b7\x8c\x88]\x1b\xd7"+\xe6px@\xc3#\\'
# or
app.config.update(SECRET_KEY='\xca\x0c\x86\x04\x98@\x02b\x1b7\x8c\x88]\x1b\xd7"+\xe6px@\xc3#\\')

視圖函數(shù):

from flask import Flask,request,render_template,url_for,redirect,session,flash

from flask_wtf import FlaskForm
from wtforms import StringField,PasswordField,SubmitField
from wtforms.validators import EqualTo,DataRequired
from config import config
app = Flask(__name__)
app.config.from_object(config["baseconfig"])


class webform(FlaskForm):

    username = StringField(label='用戶名',validators=[DataRequired()], render_kw={'placeholder':'請輸入用戶名'})
    password = PasswordField(label='密碼',validators=[DataRequired()],render_kw={'placeholder':'請輸入密碼'})
    re_password = PasswordField(label='確認(rèn)密碼',validators=[DataRequired(),EqualTo('password','密碼不一致')],render_kw={'placeholder':'確認(rèn)密碼'})
    submit = SubmitField(label='提交')


@app.route("/",methods=['POST','GET'])
def login():
    form = webform()
    if request.method == "POST":
        if form.validate_on_submit():
            username = form.username.data
            password = form.password.data
            print(username,password)
            return '%s-%s' % (username,password)
        else:
            message = form.errors
            # form中所有的錯誤信息都被errors捕捉魁亦。
            flash(message)
    return render_template('login.html',form=form)

if __name__ == '__main__':
    app.run()

登錄頁面:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form method="post">
    {{ form.csrf_token() }}
    {{ form.username.label }}{{ form.username }}
    {{ form.password.label }}{{ form.password }}
    {{ form.re_password.label }}{{ form.re_password }}
    {{ form.submit }}
    {% for message in get_flashed_messages() %}
        {{ message }}
    {% endfor %}
</form>
</body>
</html>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末渔隶,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子洁奈,更是在濱河造成了極大的恐慌派撕,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件睬魂,死亡現(xiàn)場離奇詭異,居然都是意外死亡镀赌,警方通過查閱死者的電腦和手機(jī)氯哮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來商佛,“玉大人喉钢,你說我怎么就攤上這事×寄罚” “怎么了肠虽?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長玛追。 經(jīng)常有香客問我税课,道長,這世上最難降的妖魔是什么痊剖? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任韩玩,我火速辦了婚禮,結(jié)果婚禮上陆馁,老公的妹妹穿的比我還像新娘找颓。我一直安慰自己,他們只是感情好叮贩,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布击狮。 她就那樣靜靜地躺著佛析,像睡著了一般。 火紅的嫁衣襯著肌膚如雪彪蓬。 梳的紋絲不亂的頭發(fā)上寸莫,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天,我揣著相機(jī)與錄音寞焙,去河邊找鬼储狭。 笑死,一個胖子當(dāng)著我的面吹牛捣郊,可吹牛的內(nèi)容都是我干的辽狈。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼呛牲,長吁一口氣:“原來是場噩夢啊……” “哼刮萌!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起娘扩,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤着茸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后琐旁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涮阔,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年灰殴,在試婚紗的時候發(fā)現(xiàn)自己被綠了敬特。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡牺陶,死狀恐怖伟阔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情掰伸,我是刑警寧澤皱炉,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站狮鸭,受9級特大地震影響合搅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜怕篷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一历筝、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧廊谓,春花似錦梳猪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽呛哟。三九已至,卻和暖如春匿沛,著一層夾襖步出監(jiān)牢的瞬間扫责,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人实抡。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像苏揣,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子推姻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 22年12月更新:個人網(wǎng)站關(guān)停平匈,如果仍舊對舊教程有興趣參考 Github 的markdown內(nèi)容[https://...
    tangyefei閱讀 35,165評論 22 257
  • 第四章 Web表單 序:為什么需要Flask-wtf 第 2 章中介紹的請求對象包含客戶端發(fā)出的所有請求信息。其中...
    科幻經(jīng)典閱讀 840評論 0 2
  • 1.回顧 在上一章節(jié)中藏古,我們定義了一個簡單的模板增炭,使用占位符來虛擬了暫未實(shí)現(xiàn)的部分,比如用戶以及文章等拧晕。 在本章我...
    可汗?fàn)敔?/span>閱讀 5,351評論 0 3
  • 《好好學(xué)習(xí)》二八法則:相信大家都非常熟悉二八法則了隙姿,我們生活中很多常見的現(xiàn)象都遵循這個原理,比如20%的人擁有80...
    大_林子閱讀 153評論 0 0
  • 從肉菜店出來厂捞,提著糧食和蔬菜孟辑,路燈昏黃,車流如織蔫敲,他穿過喧囂,一路沉默著走向窗燈靜默的筒子樓炭玫。他不把那個房子稱為家...
    沙漠化閱讀 195評論 0 0