国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁 > 營銷資訊 > 網(wǎng)站運(yùn)營 > Python Web開發(fā)—Flask快速建站—Flask概述、路由詳解、Jinja2模板、SQLAlchemy、WTFor

Python Web開發(fā)—Flask快速建站—Flask概述、路由詳解、Jinja2模板、SQLAlchemy、WTFor

時(shí)間:2023-08-04 05:03:01 | 來源:網(wǎng)站運(yùn)營

時(shí)間:2023-08-04 05:03:01 來源:網(wǎng)站運(yùn)營

Python Web開發(fā)—Flask快速建站—Flask概述、路由詳解、Jinja2模板、SQLAlchemy、WTForm表點(diǎn):介紹了Django框架進(jìn)階(Python Web開發(fā)—Django框架進(jìn)階—Django Admin站點(diǎn)管理、Admin站點(diǎn)簡介、Admin站點(diǎn)配置與登錄、Admin的使用、Admin站點(diǎn)的定制),目前在各大技術(shù)類網(wǎng)站(如github、stackoverflow)中討論和詢問度都排在前面的Python web框架是Django和Flask,接下來將學(xué)習(xí)Flask簡介、Flask安裝、Flask實(shí)現(xiàn)第一行代碼、一般路由、帶參數(shù)的路由、HTTP訪問方式、生成URL、初識Jinja2、Jinja2基礎(chǔ)語法、控制結(jié)構(gòu)、過濾器、模板繼承和SQLAlchemy安裝、SQLAlchemy的初使用、使用SQLAlchemy進(jìn)行數(shù)據(jù)庫操作、表單定義、模板編寫、接收表單數(shù)據(jù)、表單驗(yàn)證。

? Flask簡介

Flask是由Armin Ronacher使用Python編寫完成的,它是一個輕量級的 Web 框架,其中使用的WSGI(詳見第6.節(jié)“請求與響應(yīng)”)工具箱是Werkzeug,模板引擎是Jinja2。Flask簡點(diǎn)易學(xué),自帶開發(fā)服務(wù)器、集成點(diǎn)元測試、debugger,而且建站速度非???。

Werkzeug是Python的WSGI規(guī)范實(shí)用函數(shù)庫,基于BSD協(xié)議,在開發(fā)過程中使用十分廣泛。主要有以下一些功能特性:

HTTP頭解析與封裝

易于使用的request和response對象

基于瀏覽器的交互式JavaScript調(diào)試器

與WSGI 1.0規(guī)范100%兼容

支持Unicode

支持基本的會話管理及簽名Cookie

支持URI和IRI的Unicode使用工具

內(nèi)置支持兼容各種瀏覽器和WSGI服務(wù)器的實(shí)用工具

集成URL請求路由系統(tǒng)

Jinja2是基于Python的模板引擎,應(yīng)用非常廣泛,就如同PHP中的Smarty,J2EE當(dāng)中的Freemarker和velocity,如果大家對以上兩者有所了解,理解起來會相對容易。Jinja2主要有以下特性:

具有集成的沙箱執(zhí)行環(huán)境

具有強(qiáng)大的HTML自動轉(zhuǎn)義系統(tǒng),有效阻止跨站腳本攻擊

執(zhí)行效率高效

編譯模式可選

模板繼承機(jī)制

標(biāo)準(zhǔn)的調(diào)試系統(tǒng)

對于Jinja2的語法可重新配置,以適應(yīng)不同的輸出

注意:在使用Flask 0.10.1版本進(jìn)行開發(fā)時(shí),一定要安裝Python3.3及以上版本,F(xiàn)lask 0.10.1不支持Python3.2及更舊的版本。

? Flask安裝

由于本書使用的是PyCharm,其中集成包含了Flask框架,因此Flask的安裝與Django大同小異。

點(diǎn)擊【Create New Project】用來創(chuàng)建新項(xiàng)目,如圖所示。

點(diǎn)擊左側(cè)導(dǎo)航欄中的Flask,然后在右側(cè)的Location中輸入所建項(xiàng)目的地址及名稱,在Interpreter中選擇Python解釋器,此處選擇的是虛擬環(huán)境V_D2,最后點(diǎn)擊Create即可建成項(xiàng)目flask1,如圖所示。

創(chuàng)建完成如圖所示。




? Flask實(shí)現(xiàn)第一行代碼

在創(chuàng)建好flask1項(xiàng)目后,接下來講解如何使用Flask。眾所周知,第一行代碼是輸出“Hello World!”,但是在Flask中有一個項(xiàng)目名稱加上.py的文件,里面就包含輸出“Hello World!”的代碼,具體示例如下:

以上代碼主要內(nèi)容有:

導(dǎo)入Flask類。

創(chuàng)建Flask類的實(shí)例,第一個參數(shù)是應(yīng)用模塊或者包的名稱。__name__為點(diǎn)一模塊,若是有模塊導(dǎo)入則不同。(即“__name__”的值為“__main__”或?qū)嶋H導(dǎo)入模塊名稱),F(xiàn)lask通過這個名稱的不同來判斷模板和所需文件的位置。

使用route()裝飾器告知Flask能觸發(fā)函數(shù)的URL,即綁定URL。

hello_world()的函數(shù)名在生成URL時(shí)被特定的函數(shù)采用,返回的內(nèi)容顯示在用戶瀏覽器中。

用run()函數(shù)來運(yùn)行應(yīng)用。 其中if __name__ == '__main__'確保服務(wù)器只會在該腳本被Python解釋器直接執(zhí)行的時(shí)候才會運(yùn)行,而不是作為模塊導(dǎo)入的時(shí)候。

注意:403 Forbidden()會一直運(yùn)行,因此不要在它之后寫任何代碼。

接下來運(yùn)行上述示例,如圖所示。

然后在瀏覽器中輸入http://127.0.0.1:5000/,結(jié)果如圖所示。

至此,F(xiàn)lask的安裝、概述和初步使用講解完成,接下來的章節(jié)是對Flask使用及其他知識進(jìn)行詳細(xì)的講解。

路由詳解

隨著互聯(lián)網(wǎng)的發(fā)展,現(xiàn)代Web應(yīng)用的URL都十分的優(yōu)雅,易于辨識記憶。若直接將某一部分的內(nèi)容綁定為特定的URL,在訪問網(wǎng)站時(shí)就會顯示所需頁面,而不是索引頁,F(xiàn)lask的路由設(shè)置就能實(shí)現(xiàn)此功能。本節(jié)接下來講解路由URL設(shè)置。




? 一般路由

Flask中route()裝飾器將定義的函數(shù)綁定到對應(yīng)的URL上。一般路由的綁定如例所示。

在例中有兩個函數(shù)分別是index()、hello()。對應(yīng)的URL分別為http://127.0.0.1:5000/、http://127.0.0.1:5000/hello。

? 帶參數(shù)的路由

在上一小節(jié)中講解了一般路由的配置以及綁定,接下來將講解復(fù)雜的路由即帶參數(shù)的路由配置。

1.在路徑中添加變量參數(shù)

在日常生活中URL不會是一成不變的,比如用戶在登錄某個網(wǎng)站時(shí),會發(fā)現(xiàn)URL上會有一些變動,會出現(xiàn)一些變量的名稱,而且這些變量的值會隨著填入值的變化而變化,如例所示。

在使用route()函數(shù)進(jìn)行綁定時(shí)可以通過<variable_name>的方式添加變量,如例中<username>,并應(yīng)用在被映射的函數(shù)中。例運(yùn)行結(jié)果如圖所示。

2.指定變量的類型

在聲明變量時(shí),若不想使用默認(rèn)類型,可以指定變量的類型,如例所示。

例運(yùn)行之后在瀏覽器中顯示結(jié)果如圖所示。




注意:

不指定變量類型則默認(rèn)為path類型。

Flask中允許三種類型的變量映射,分別是int、float、path三種。




3.路徑最后分隔符有無的區(qū)別

在URL中都會出現(xiàn)“/”的分隔符,“/”在不同的位置所代表的內(nèi)容是不相同的,如在開頭則是一個絕對路徑,在中間則是做隔離路徑的層級,在末尾有兩種情況,一種是有“/”,另一種是沒有“/”,這兩種情況還是存在較大的差別的,如例所示。

在瀏覽器中輸入相關(guān)url即可查看路徑最后分隔符有無的區(qū)別,如圖所示。

在圖中,有“/”作為結(jié)尾的路徑在訪問時(shí)不管最后加不加“/”都可以訪問到相應(yīng)的內(nèi)容,但是沒有“/”作為結(jié)尾的路徑在訪問時(shí)不加“/”可以正常訪問相應(yīng)的內(nèi)容,而加了“/”則訪問不到相應(yīng)的內(nèi)容,以上就是兩者的區(qū)別。




? HTTP訪問方式

HTTP(超文本傳輸協(xié)議)有許多不同的訪問URL的方法。在Flask中,路由默認(rèn)只回應(yīng)GET請求,但通過route()裝飾器中methods參數(shù)可以改變這個行為,具體示例如下:




上述示例中,通過methods參數(shù)聲明了兩種訪問方式:GET和POST,不管在客戶端以何種方式請求 “/login”都會映射到login()函數(shù),在函數(shù)中通過request.method屬性來獲取此次HTTP請求的方式。上述示例是將兩種訪問方式都映射到同一個函數(shù)中,當(dāng)然為了靈活地運(yùn)用URL與訪問方法以及被映射函數(shù)的關(guān)系,F(xiàn)lask還可以通過把不同的訪問方式賦予相同的URL,但映射不同的函數(shù),具體示例如下:

上述示例通過訪問方式的不同將“/login”這個URL映射到不同的函數(shù)中。

由于在HTTP中不同訪問方式之間存在聯(lián)系,因此在Flask中定義了兩組隱式的規(guī)則。

當(dāng)route裝飾器中GET方式被指定,那么HEAD方式會自動加入該裝飾器中

在Flask 0.6版本以后,當(dāng)route裝飾器中任何方式被指定,都會將OPTIONS方式加入該裝飾器中。

在HTTP中有一些非常常見的訪問方式,如表所示。

? 生成URL

學(xué)習(xí)中可知Flask可以匹配URL,但有的時(shí)候,需要通過函數(shù)的名稱來獲得與其綁定的URL,即反向生成URL。在Flask中可以通過url_for()函數(shù)來實(shí)現(xiàn)這個功能,如例所示。

輸出結(jié)果如圖所示。

在程序中使用url_for()生成URL的原因有以下幾點(diǎn):

反向解析比硬編碼的可讀性以及可維護(hù)性都更好,當(dāng)需修改路由函數(shù)中的URL地址時(shí),不需要去更改和調(diào)用url_for處的代碼。

URL構(gòu)建生成時(shí)會自動將特殊字符和Unicode數(shù)據(jù)轉(zhuǎn)義,省去很多麻煩。




Jinja2模板

? 初識Jinja2

若大家在此之前有接觸過其它的基于文本的模板語言,比如Smarty或者本書第6章所講解的Django,那么 Jinja2 會讓大家有眼前一亮的感覺。接下來先用一個簡點(diǎn)的實(shí)例來了解Jinja2模板引擎,如例所示。

首先在項(xiàng)目中的templates文件夾下創(chuàng)建兩個模板文件,分別為index.html、user.html,在兩個文件中分別編寫以下內(nèi)容。

index.html:

user.html:

然后再修改flask1.py中的內(nèi)容,代碼如下。

flask1.py:

在例中,F(xiàn)lask在程序項(xiàng)目下的templates子文件夾中尋找模板,然后通過Flask 提供的render_template()函數(shù)把Jinja2模板引擎集成到程序中,(render_template()函數(shù)的第一個參數(shù)是模板的文件名,其他的參數(shù)都是鍵值對,表示模板中變量對應(yīng)的真實(shí)值)最終將模板內(nèi)容渲染出來。渲染顯示結(jié)果如圖所示。

? Jinja2基礎(chǔ)語法

從第一小節(jié)的內(nèi)容中可以發(fā)現(xiàn)使用Jinja2開發(fā)網(wǎng)站事半功倍,因?yàn)樗鼘⒎蛛x的模板和渲染兩部分內(nèi)容進(jìn)行結(jié)合,最終達(dá)成所需效果。接下來開始講解Jinja2的一些基礎(chǔ)語法知識。

Jinja2模板主要由普通內(nèi)容、變量、表達(dá)式、標(biāo)簽和注釋五部分內(nèi)容組成,其中五部分內(nèi)容的具體含義如下所示:

普通內(nèi)容:無特殊意義的內(nèi)容,模板渲染時(shí)不進(jìn)行解釋。

變量:在模板渲染時(shí)會被傳入的真實(shí)值替換。

表達(dá)式:對變量進(jìn)行算術(shù)或邏輯操作。

標(biāo)簽:用于在模板渲染時(shí)進(jìn)行邏輯控制。

注釋:模板渲染時(shí)刪除的內(nèi)容(即不顯示的內(nèi)容)。

下面通過一個示例來對Jinja2的基礎(chǔ)語法進(jìn)行講解,具體示例如下:

上述示例是一個模板示例,其中大多數(shù)的HTML標(biāo)簽(如<head>、<body>、<li>等)都是普通內(nèi)容,模板渲染的時(shí)候不進(jìn)行解釋,還有一些用特殊格式定義的內(nèi)容,如下所述:

{{…}}:裝載變量或者是表達(dá)式,模板渲染的時(shí)候,會將同名參數(shù)的真實(shí)值與這個變量替換。如本例中的item(item.href、item.caption)、a_variable、user.name、user['name']等等。

{%...%}:裝載控制語句。本例中聲明了一個根據(jù)navigation變量元素進(jìn)行迭代的循環(huán)體,使用for語句進(jìn)行控制。

{#...#}:裝載注釋內(nèi)容。本例中注釋內(nèi)容為“a comment”,這一部分的內(nèi)容不會出現(xiàn)在渲染結(jié)果中,在渲染過程中會將此處內(nèi)容刪除。

調(diào)用該模板與例大同小異,使用render_template()函數(shù)進(jìn)行傳值渲染,具體示例如下:

模板渲染之后的HTML如下:

? 控制結(jié)構(gòu)

展示控制結(jié)構(gòu)中的for循環(huán),除此之外,控制結(jié)構(gòu)還包括很多其他結(jié)構(gòu)。本節(jié)內(nèi)容主要是對Jinja2模板中的控制結(jié)構(gòu)進(jìn)行講解。

1.選擇(判斷)

選擇控制結(jié)構(gòu)與Python中類似,沒有多大差別,此處不再贅述,在下一個內(nèi)容循環(huán)結(jié)構(gòu)的案例中加以應(yīng)用。

2.循環(huán)

循環(huán)在上一小節(jié)中已經(jīng)有所了解,接下來講解循環(huán)當(dāng)中需要注意的一些知識點(diǎn)。模板中循環(huán)與Python中不同,不能使用break或continue來進(jìn)行控制循環(huán),但可以通過一些特殊的變量來控制循環(huán)。

具體如表所示。

具體示例如下:

將內(nèi)容修改為上述示例,其中使用了loop.first這個特殊變量使得循環(huán)不顯示第一個值。上述示例使用了{(lán)%if%}和{%endif%}來對循環(huán)的結(jié)果進(jìn)行判斷選擇,也就是上一部分知識點(diǎn)的內(nèi)容。

渲染之后的HTML如下所示:

從渲染后的HTML中可以看到,navigation中的第一條數(shù)據(jù)并沒有渲染出來,即<li><a href="杭州千鋒互聯(lián)科技有限公司">1000phone</a></li>這一條內(nèi)容,因此在模板中可以通過這些特殊變量來控制循環(huán)。




3.測試

在Jinja2模板引擎的術(shù)語中,測試(Test)是根據(jù)變量或表達(dá)式的值生成布爾結(jié)果的一種函數(shù)工具,使用時(shí)需要在變量或表達(dá)式后加“is”和測試名稱,具體示例如下:

在實(shí)際編程開發(fā)過程中會遇到許多需要測試的變量以及表達(dá)式,而且這些測試在循環(huán)和判斷控制語句中起關(guān)鍵性作用,因此大家需要熟練掌握一些常用的測試函數(shù)表。




4.宏

Jinja2模板還支持宏(macro),宏其實(shí)類似于Python中的函數(shù),宏的使用具體示例如下:

宏的定義:

宏的使用:

為了方便宏的重復(fù)使用,可以將宏定義在一個點(diǎn)獨(dú)的文件中,使用時(shí)直接在代碼中引用,具體示例如下:

?過濾器

在Django的學(xué)習(xí)中講解了過濾器的相關(guān)知識,在Jinja2模板中也有過濾器,主要作用與Django中大同小異,而且Jinja2不僅有內(nèi)置的過濾器,還可以自定義過濾器,接下來講解Jinja2中的內(nèi)置過濾器。

? 模板繼承

對于一個網(wǎng)站來說,會有不同的顯示頁面,但是這些頁面中存在許多相同內(nèi)容,比如頁頭、導(dǎo)航欄、頁尾等等。這些相同的部分都可以使用Jinja2中的模板繼承來完成,即將這些相同部分內(nèi)容集中編寫到一個“基模板”中,然后在不同的頁面中繼承“基模板”,從而導(dǎo)入其內(nèi)容,最終達(dá)到公共內(nèi)容集中而且易于修改的目的。

SQLAlchemy

SQLAlchemy是Python編程語言下的一款開源軟件,提供了SQL工具包及對象關(guān)系映射(ORM)工具,而且是Python中最有名ORM框架。它主要是為高效和高性能的數(shù)據(jù)庫訪問設(shè)計(jì),實(shí)現(xiàn)了完整的企業(yè)級持久模型。其理念是SQL數(shù)據(jù)庫的量級和性能重要于對象集合,而對象集合的抽象又重要于表和行。

? SQLAlchemy安裝

首先需要安裝SQLAlchemy庫,因此接下來先學(xué)習(xí)如何在PyCharm中安裝SQLAlchemy庫。

在PyCharm中點(diǎn)擊File,然后再點(diǎn)擊settings,如圖所示。




點(diǎn)擊Project:flask1(此處flask1是項(xiàng)目名稱),再點(diǎn)擊Project Interpreter,如圖所示。




在圖中,點(diǎn)擊右側(cè)綠色的【+】,然后在搜索框中輸入SQLAlchemy,找到SQLAlchemy并選中,之后直接點(diǎn)擊Install Package即可安裝,如圖所示。




SQLAlchemy安裝成功,如圖所示。

安裝SQLAlchemy成功之后,就可以在項(xiàng)目中導(dǎo)入并使用這個庫了。

使用SQLAlchemy有四種方法,分別是Flask-SQLAlchemy擴(kuò)展、顯示調(diào)用、手動實(shí)現(xiàn)ORM、SQL抽象層。由于本章主要是使用Flask框架,因此建議使用第一種方法。

Flask-SQLAlchemy擴(kuò)展包中包含了SQLAlchemy,因此安裝Flask-SQLAlchemy擴(kuò)展(安裝方式如SQLAlchemy安裝)就可以使用SQLAlchemy庫了。使用時(shí)直接導(dǎo)入即可,具體示例如下:

? SQLAlchemy的初使用

安裝了擴(kuò)展包之后接下來講解如何使用SQLAlchemy,本節(jié)以一個案例來講解SQLAlchemy的使用,如例所示。

SQLAlchemy的使用

1.創(chuàng)建SQLAlchemy配置文件

配置文件名為database.py,配置文件代碼如下。

配置文件中前3行都是導(dǎo)入內(nèi)容,第1行是導(dǎo)入flask的核心類Flask,第2行是從flask_sqlalchemy擴(kuò)展包中導(dǎo)入SQLAlchemy,第3行導(dǎo)入os庫為了方便定位。從第4到第8行是配置信息,第4行是將當(dāng)前文件傳入dirname()函數(shù)中,獲取當(dāng)前文件所在路徑,abspath()函數(shù)獲取該文件所在的絕對路徑,以便在配置數(shù)據(jù)庫的路徑時(shí)使用;第6、7、8行中SQLALCHEMY_DATABASE_URI:用于連接數(shù)據(jù)庫,更多主流數(shù)據(jù)庫的連接方式如表所示。SQLALCHEMY_TRACK_MODIFICATIONS:若設(shè)置成True(默認(rèn)情況),F(xiàn)lask-SQLAlchemy將會追蹤對象的修改并且發(fā)送信號,這需要額外的內(nèi)存,如果非必要時(shí)可以禁用它;若不顯式的調(diào)用它,在最新版的運(yùn)行環(huán)境下,會顯示警告。第9行是SQLAlchemy()函數(shù),將剛剛創(chuàng)建的Flask框架與工程所需要使用的數(shù)據(jù)庫綁定到一起,以便實(shí)現(xiàn)工程與數(shù)據(jù)庫連接,實(shí)現(xiàn)數(shù)據(jù)操作。最后兩行就是手動創(chuàng)建函數(shù),以便初始化數(shù)據(jù)庫,以上是整個配置文件內(nèi)容。

2.創(chuàng)建映射表

對于一個數(shù)據(jù)庫,其中最主要的就是數(shù)據(jù),而數(shù)據(jù)都放在數(shù)據(jù)表中,在工程中需要創(chuàng)建映射表,以便將表映射到數(shù)據(jù)庫中,達(dá)到創(chuàng)建表的作用。

接下來在database.py中創(chuàng)建一個簡點(diǎn)的User數(shù)據(jù)表,具體示例如下:

第2行到最后是創(chuàng)建User類。User繼承了db.model類,將當(dāng)前創(chuàng)建的映射表和數(shù)據(jù)庫db綁定在一起,若此時(shí)工程文件調(diào)用create_all()函數(shù),那么會自動將綁定后的映射表文件創(chuàng)建在數(shù)據(jù)庫文件中。db.Column用來創(chuàng)建映射表字段,常用類型如表所示。

primary_key=True設(shè)置當(dāng)前字段為主鍵,unique=True設(shè)置當(dāng)前字段不可重復(fù)。最后的__repr__()函數(shù)是為以后調(diào)試輸出提供接口。




3.創(chuàng)建數(shù)據(jù)庫

直接調(diào)用db.create_all()函數(shù)就可以創(chuàng)建數(shù)據(jù)庫了,如圖所示。

創(chuàng)建之后在項(xiàng)目的根目錄下就會出現(xiàn)test.db的數(shù)據(jù)庫文件,如圖所示。

創(chuàng)建完之后可以通過以下方式進(jìn)行驗(yàn)證。在項(xiàng)目編寫環(huán)境的右側(cè)點(diǎn)擊Database,之后點(diǎn)擊綠色的【+】,找到Data Source,然后找到Sqlite (Xerial)并點(diǎn)擊,如圖所示。

然后在File中選中生成的test.db文件,其他內(nèi)容都會自動生成,然后在點(diǎn)擊【OK】之前要確保安裝了缺失插件,如圖所示。

若缺少插件,會在no object下方出現(xiàn)Download字樣,插件一定要安裝,否則會出錯,直接點(diǎn)擊Download即可安裝,如圖所示。

確認(rèn)安裝好插件之后點(diǎn)擊OK,顯示界面如圖所示,說明數(shù)據(jù)庫以及數(shù)據(jù)表創(chuàng)建成功。

? 使用SQLAlchemy進(jìn)行數(shù)據(jù)庫操作

已經(jīng)講解了如何使用SQLAlchemy創(chuàng)建數(shù)據(jù)庫以及映射表,創(chuàng)建好之后接下來講解使用SQLAlchemy進(jìn)行數(shù)據(jù)操作,如數(shù)據(jù)的增刪改查。

1.insert.py

第3~6行相當(dāng)于將SQL語句賦值給對象。第7~10行將對應(yīng)數(shù)據(jù)庫的操作保存在緩存中,既然是保存到緩存中,那么該數(shù)據(jù)庫語句還沒有提交到數(shù)據(jù)庫中。第11行commit()和數(shù)據(jù)庫中的commit指令一樣,將數(shù)據(jù)庫操作提交到數(shù)據(jù)庫中。運(yùn)行之后數(shù)據(jù)庫中結(jié)果如圖所示。

2.delete.py




調(diào)用delete()函數(shù),將數(shù)據(jù)傳入db對象,并提交到數(shù)據(jù)庫中。

3.update.py

首先將對象查詢出來,然后將修改的字段賦值,并將查詢出的對象提交到數(shù)據(jù)庫。

4.select1.py

1)一般查詢

此處的查詢是將所有用戶的信息按照id、user_name、email的形式輸出內(nèi)容,只是一個簡點(diǎn)的查詢輸出操作。運(yùn)行結(jié)果如圖所示。

2)精確查詢

現(xiàn)實(shí)生活中會遇到一些需要精確查詢的情況,如買火車票、飛機(jī)票時(shí)需要查詢的是目的地的準(zhǔn)確余票,而在實(shí)際開發(fā)工作中,同樣會需要使用到精確查詢,具體示例如下:

運(yùn)行結(jié)果如圖所示。

3)模糊查詢

在生活中,學(xué)生在圖書館查找關(guān)于Python的書籍,只需輸入Python字樣,所有含有Python字樣的書籍都會顯示出來,此時(shí)便使用了模糊查詢。在實(shí)際開發(fā)中,某些項(xiàng)目也會需要提供模糊查找的功能,具體示例如下:

運(yùn)行結(jié)果如圖所示。

4)其他查詢條件

其他查詢條件如表所示。

在query對象上調(diào)用的常見過濾器如表所示。

在查詢上應(yīng)用指定過濾器后,通過調(diào)用執(zhí)行函數(shù)來執(zhí)行查詢,最后返回結(jié)果。常用的查詢執(zhí)行函數(shù)如表所示。

WTForm表點(diǎn)

在Web開發(fā)中,表點(diǎn)是整個互動式網(wǎng)站進(jìn)行客戶端和服務(wù)器端交互的核心。在實(shí)際開發(fā)中,由于現(xiàn)在網(wǎng)頁內(nèi)容越來越豐富,若開發(fā)者直接請求上下文獲取客戶端數(shù)據(jù)并解析,會出現(xiàn)邏輯混亂的局面。在Flask框架中有一個WTForm表點(diǎn)庫,可以大大簡化表點(diǎn)的處理,可讀性也非常高,因此可以很好地解決上述問題。接下來講解使用WTForm進(jìn)行表點(diǎn)處理。




? 表單定義

在定義表點(diǎn)之前先要安裝WTForm表點(diǎn)插件flask-wtf,安裝方式與安裝SQL-Alchemy一樣,安裝成功后就可以對表點(diǎn)進(jìn)行定義了。接下來以用戶登錄表點(diǎn)為例進(jìn)行講解,如例所示。

先導(dǎo)入以上包,其中“from flask_wtf import FlaskForm”是導(dǎo)入Form表點(diǎn),“from wtforms import StringField,PasswordField”是導(dǎo)入HTML標(biāo)準(zhǔn)字段,此處的StringField是文本字段,PasswordField是密碼文本字段,常用的HTML字段類型如表所示。

接下來定義表點(diǎn)類MyForm,繼承自FlaskForm,主要包含兩部分內(nèi)容user(用戶名)和pwd(密碼)。

其中“from wtforms.validators import DataRequired”是導(dǎo)入驗(yàn)證函數(shù),DataRequired代表數(shù)據(jù)必填項(xiàng),具體在表點(diǎn)驗(yàn)證中講解。

接下來定義表點(diǎn)類MyForm,繼承自FlaskForm,主要包含兩部分內(nèi)容user(用戶名)和pwd(密碼)。

Flask為了防范跨站請求偽造技術(shù)(cross-site request forgery,CSRF )攻擊,默認(rèn)在使用flask-wtf之前要求app一定要設(shè)置secret_key,即上述代碼中的app.secret_key。

將表點(diǎn)定義好后開始編寫前端HTML模板,以下是login.html模板文件代碼。




? 模板編寫

在login.html中使用{{ url_for('login') }}將數(shù)據(jù)提交到/login這個路由下。表點(diǎn)中,“form.hidden_tag()”會生成一個隱藏的“<div>”標(biāo)簽,其中會渲染任何隱藏的字段,最主要的是CSRF字段。WTForms默認(rèn)開啟CSRF保護(hù),若要關(guān)閉它(不建議這樣做),可以在實(shí)例化表點(diǎn)時(shí)傳入?yún)?shù),如“form = MyForm(csrf_enabled=False)”。

? 接收表單數(shù)據(jù)

login.html模板文件將用戶在瀏覽器端輸入的數(shù)據(jù)信息傳送過來之后,需要進(jìn)行接收并判斷是否符合要求。以下示例是接收數(shù)據(jù)的代碼:

先聲明MyForm實(shí)例對象form,使用if語句判斷submit是否點(diǎn)擊提交,然后再對‘user’、‘pwd’進(jìn)行簡點(diǎn)的判斷,若均符合,則將返回的信息重新渲染到login.html文件中。

具體結(jié)果如圖所示。

若用戶名和密碼輸入錯誤,運(yùn)行結(jié)果如圖所示。

? 表單驗(yàn)證

在WTForm表點(diǎn)中有很多驗(yàn)證函數(shù),常用的驗(yàn)證函數(shù)如表所示,用于各種表點(diǎn)數(shù)據(jù)的驗(yàn)證,例中的DataRequired就是其中之一。

小結(jié):

主要講解了Flask框架的基礎(chǔ)以及使用,尤其是對其中的路由設(shè)置、Jinja2模板、SQLAlchemy數(shù)據(jù)庫插件、WTForm表點(diǎn)插件等知識進(jìn)行著重講解,這幾個部分的內(nèi)容屬于Flask框架的重點(diǎn)。




第三課時(shí)

關(guān)鍵詞:模板

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉