Flask之表單

web表單是web應(yīng)用中最基本的構(gòu)建要素,我們將通過表單來實(shí)現(xiàn)用戶發(fā)帖和應(yīng)用登錄功能。
創(chuàng)建config.py:

CSRF_ENABLED = True #吊圾。CSRF_ENABLED配置啟用了[跨站請求攻擊保護(hù)]谭溉,大部分情況下你都需要開啟此功能粥惧,這能使你的應(yīng)用更安全喘鸟。
SECRET_KEY = 'you-will-never-guess' #SECRET_KEY設(shè)置當(dāng)CSRF啟用時有效匆绣,這將生成一個加密的token供表單驗(yàn)證使用,你要確保這個KEY足夠復(fù)雜不會被簡單推測迷守。

用戶登錄表單

使用Flask-WTF創(chuàng)建的表單就像一個對象犬绒,需要從Form類繼承子類。然后在這個子類中定義一些類的屬性變量作為表單字段就可以了兑凿。

表單模板

<!-- extend from base layout -->
{% extends "base.html" %}

{% block content %}
<h1>Sign In</h1>
<form action="" method="post" name="login">
    {{form.hidden_tag()}}
    <p>
        Please enter your OpenID:<br>
        {{form.openid(size=80)}}<br>
    </p>
    <p>{{form.remember_me}} Remember Me</p>
    <p><input type="submit" value="Sign In"></p>
</form>
{% endblock %}

它使用模板參數(shù) {{ ... }} 來實(shí)例化表單字段凯力,而表單字段又來源于我們剛剛定義的表單類,模板參數(shù)中使用了 form 這個名稱礼华。當(dāng)我們使用視圖函數(shù)引用表單類并渲染到模板時咐鹤,我們要特別注意這個把表單類傳遞到模板的變量名。

我們在配置中開啟了CSRF(跨站偽造請求)功能圣絮,模板參數(shù) {{ form.hidden_tag() }} 會被替換成一個具有防止CSRF功能的隱藏表單字段祈惶。在開啟了CSRF功能后,所有模板的表單中都需要添加這個模板參數(shù)扮匠。

表單視圖

from flask import render_template, flash, redirect
from app import app
from forms import LoginForm

# index view function suppressed for brevity

@app.route('/login', methods = ['GET', 'POST'])
def login():
    form = LoginForm()
    return render_template('login.html', 
        title = 'Sign In',
        form = form)

我們引入登錄表單類捧请,然后把它實(shí)例化到一個變量,最后再把這個變量傳給模板棒搜。

從表單中接收數(shù)據(jù)

下面就是我們這個登錄視圖函數(shù)的新版本, 加入了表單數(shù)據(jù)驗(yàn)證和處理 疹蛉。下面就是我們這個登錄視圖函數(shù)的新版本, 加入了表單數(shù)據(jù)驗(yàn)證和處理:

@app.route('/login', methods = ['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        flash('Login requested for OpenID="' + form.openid.data + '", remember_me=' + str(form.remember_me.data))
        return redirect('/index')
    return render_template('login.html', 
        title = 'Sign In',
        form = form)

validate_on_submit() 這個方法做了表單處理的所有工作。如果你在表單向用戶提供數(shù)據(jù)時(舉個栗子:用戶在它之前修改了一下提交的數(shù)據(jù)) 時調(diào)用此方法力麸,它會返回 False可款。

當(dāng) validate_on_submit() 方法返回 True 的時候,我們的視圖函數(shù)又會調(diào)用兩個新的函數(shù)克蚂。它們都是從Flask 中引入的闺鲸,flash 函數(shù)用來在下一個打開的頁面中顯示定義的消息。我們現(xiàn)在用它用來做調(diào)試埃叭。因?yàn)槲覀儸F(xiàn)在還沒有做用戶登錄模塊摸恍, 所以只需要把用戶提交上來的數(shù)據(jù)顯示一下就行了。flash 函數(shù)非常有用赤屋,比如為用戶的一些操作提供消息反饋立镶。

flash 函數(shù)提供的消息不會自動出現(xiàn)在我們的網(wǎng)站頁面中,所以我們需要做點(diǎn)事情讓它在頁面中顯示出來益缎。為了讓我們所有頁面都能有這項(xiàng)激動人心的功能谜慌,所以就把它添加到基礎(chǔ)模板中吧, 下面是更新后的基礎(chǔ)模板 :

<html>
  <head>
    {% if title %}
    <title>{{title}} - microblog</title>
    {% else %}
    <title>microblog</title>
    {% endif %}
  </head>
  <body>
    <div>Microblog: <a href="/index">Home</a></div>
    <hr>
    {% with messages = get_flashed_messages() %}
    {% if messages %}
    <ul>
    {% for message in messages %}
        <li>{{ message }} </li>
    {% endfor %}
    </ul>
    {% endif %}
    {% endwith %}
    {% block content %}{% endblock %}
  </body>
</html>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市莺奔,隨后出現(xiàn)的幾起案子欣范,更是在濱河造成了極大的恐慌变泄,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恼琼,死亡現(xiàn)場離奇詭異妨蛹,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)晴竞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進(jìn)店門蛙卤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人噩死,你說我怎么就攤上這事颤难。” “怎么了已维?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵行嗤,是天一觀的道長。 經(jīng)常有香客問我垛耳,道長栅屏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任堂鲜,我火速辦了婚禮栈雳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘缔莲。我一直安慰自己哥纫,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布酌予。 她就那樣靜靜地躺著磺箕,像睡著了一般奖慌。 火紅的嫁衣襯著肌膚如雪抛虫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天简僧,我揣著相機(jī)與錄音建椰,去河邊找鬼。 笑死岛马,一個胖子當(dāng)著我的面吹牛棉姐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播啦逆,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼伞矩,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了夏志?” 一聲冷哼從身側(cè)響起乃坤,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后湿诊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體狱杰,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年厅须,在試婚紗的時候發(fā)現(xiàn)自己被綠了仿畸。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡朗和,死狀恐怖错沽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情眶拉,我是刑警寧澤甥捺,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站镀层,受9級特大地震影響镰禾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜唱逢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一吴侦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧坞古,春花似錦备韧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至奶陈,卻和暖如春易阳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背吃粒。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工潦俺, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人徐勃。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓事示,卻偏偏與公主長得像,于是被迫代替她去往敵國和親僻肖。 傳聞我的和親對象是個殘疾皇子肖爵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評論 2 354

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