Flask表單-WTF

Flask-WTF 提供了對 WTForms 的集成, 從 0.9.0 版本開始匆绣,F(xiàn)lask-WTF 不再從 WTforms 中導(dǎo)入任何東西最盅,你需要從 WTForms 導(dǎo)入字段突雪。表單字段的定義需要去WTForms中參考:http://wtforms.readthedocs.io/en/latest/

默認(rèn)情況下,F(xiàn)lask-WTF為避免CSRF攻擊涡贱,需要程序設(shè)置一個密鑰咏删。

app = Flask(__name__)
app.config['SECRET_KEY'] = 'xcxxxx'

定義表達(dá)類:使用Flask-WTF,每個表達(dá)都由一個繼承Form的類表示

from flask_wtf import Form
from wtforms import TextField, SubmitField
from wtforms.validators import DataRequired

class MyForm(Form):
    name = StringField('name', validators=[DataRequired()])
    submit = SubmitField('Submit')

模版中渲染

<form method="POST" action="/">
    {{ form.csrf_token }}
    {{ form.name.label }} {{ form.name(size=20) }}
</form>

或配合flaks-bootstarp直接生成

{% import "bootstarp/wtf.html" as  wtf%}

{{ wtf.quick_form(form) }}

視圖中驗(yàn)證表達(dá)

@app.route('/submit', methods=('GET', 'POST'))
def submit():
    form = MyForm()
    if form.validate_on_submit():
        return redirect('/success')
    return render_template('submit.html', form=form)

上傳文件

定義表單類

from flask_wtf.file import FileField, FileAllowed, FileRequired

class MyForm(Form):
    name = StringField('name', validators=[DataRequired()])
    photo = FileField('Your photo', validators=[FileRequired(), FileAllowed(['jpg', 'png'], 'Image Only')])
    submit = SubmitField('Submit')

試圖函數(shù)中處理

from flask import request
from werkzeug.utils import secure_filename

@main.route('/myform', methods=['GET', 'POST'])
def myform():
    form = MyForm()
    if form.validate_on_submit():
        uploadFile = request.files['photo']  # 獲取上傳文件句柄
        uploadFile.save('/tmp/%s' %secure_filename(uploadFile.filename)) # secure_filenamed檢測并過濾用戶的輸入
        return redirect('/')
    return render_template('myform.html', form=form)

模版中注意

注解
請記得設(shè)置 HTML 表單的 enctype 為 multipart/form-data 问词, 即:

<form action="/upload/" method="POST" enctype="multipart/form-data">
    ....
</form>

wtforms SelectField 動態(tài)添加option項(xiàng)

很多情況下我們使用<select>表單的時候會動態(tài)從數(shù)據(jù)庫中加載值, 修改實(shí)例化form類對象的屬性督函;

例如:在用戶注冊頁面可能需要選擇角色

Form類

class AddUserForm(Form):
    name = StringField('Username', validators=[DataRequired()])
    role_id = SelectField('role', choices=[], coerce=int)
    submit = SubmitField(u'提交')

Views

form = AddUserForm()
form.role_id.choices += [(r.id, r.name) for r in  Role.query.order_by('name').all() ]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市戏售,隨后出現(xiàn)的幾起案子侨核,更是在濱河造成了極大的恐慌,老刑警劉巖灌灾,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異悲柱,居然都是意外死亡锋喜,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進(jìn)店門豌鸡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嘿般,“玉大人,你說我怎么就攤上這事涯冠÷” “怎么了?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵蛇更,是天一觀的道長瞻赶。 經(jīng)常有香客問我,道長派任,這世上最難降的妖魔是什么砸逊? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮掌逛,結(jié)果婚禮上师逸,老公的妹妹穿的比我還像新娘。我一直安慰自己豆混,他們只是感情好篓像,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布动知。 她就那樣靜靜地躺著,像睡著了一般员辩。 火紅的嫁衣襯著肌膚如雪拍柒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天屈暗,我揣著相機(jī)與錄音拆讯,去河邊找鬼。 笑死养叛,一個胖子當(dāng)著我的面吹牛种呐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播弃甥,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼爽室,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了淆攻?” 一聲冷哼從身側(cè)響起阔墩,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瓶珊,沒想到半個月后啸箫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡伞芹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年忘苛,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片唱较。...
    茶點(diǎn)故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡扎唾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出南缓,到底是詐尸還是另有隱情胸遇,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布汉形,位于F島的核電站纸镊,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏获雕。R本人自食惡果不足惜薄腻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望届案。 院中可真熱鬧庵楷,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至弄贿,卻和暖如春春锋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背差凹。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工期奔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人危尿。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓呐萌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親谊娇。 傳聞我的和親對象是個殘疾皇子肺孤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評論 2 359

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

  • 22年12月更新:個人網(wǎng)站關(guān)停,如果仍舊對舊教程有興趣參考 Github 的markdown內(nèi)容[https://...
    tangyefei閱讀 35,188評論 22 257
  • HTML表單 在HTML中济欢,表單是 ... 之間元素的集合赠堵,它們允許訪問者輸入文本、選擇選項(xiàng)法褥、操作對象等等茫叭,然后將...
    蘭山小亭閱讀 3,419評論 2 14
  • 第二部分 Blog例子 第八章 用戶驗(yàn)證 大部分程序需要追蹤用戶身份。當(dāng)用戶連接到程序挖胃,通過一系列步驟使自己的身份...
    易木成華閱讀 1,295評論 0 4
  • 第四章 Web表單 序:為什么需要Flask-wtf 第 2 章中介紹的請求對象包含客戶端發(fā)出的所有請求信息杂靶。其中...
    科幻經(jīng)典閱讀 861評論 0 2
  • 坐在田間抽煙的老漢 吐一管旱煙圈嘆息一聲 煙霧是生活的麻醉劑 飄散空中宛如天女散花 只有在田間抽煙時 才感覺掐痛肌...
    見素抱樸_MPES閱讀 330評論 0 1