亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

Flask Web Development —— 基本應(yīng)用程序結(jié)構(gòu)(上)

NusterCache / 1447人閱讀

摘要:注對(duì)于開(kāi)發(fā)者來(lái)說(shuō),傳給應(yīng)用程序構(gòu)造函數(shù)的參數(shù)是比較容易弄混淆的。在應(yīng)程序中定義路由的最便捷的方式是通過(guò)顯示定義在應(yīng)用程序?qū)嵗系难b飾器,注冊(cè)被裝飾的函數(shù)來(lái)作為一個(gè)路由。一個(gè)常見(jiàn)的模式是使用裝飾器來(lái)注冊(cè)函數(shù)作為一個(gè)事件處理程序。

在這一章,你將學(xué)習(xí)Flask應(yīng)用程序不同部分。同時(shí)你將編寫(xiě)和運(yùn)行你的第一個(gè)Flask web應(yīng)用程序。

1、初始化

在這章,你將學(xué)到Flask應(yīng)用程序的不同部分。同時(shí),你將編寫(xiě)和運(yùn)行你的第一個(gè)Flask web應(yīng)用程序。

所有的Flask應(yīng)用程序都必須創(chuàng)建一個(gè) 應(yīng)用程序?qū)嵗?/em> 。使用web服務(wù)器網(wǎng)關(guān)接口協(xié)議將所有從客戶(hù)端接收的請(qǐng)求傳遞給這個(gè)對(duì)象處理。這個(gè)應(yīng)用程序?qū)嵗褪?strong>Flask類(lèi)的一個(gè)對(duì)象,通常使用下面的方式創(chuàng)建:

from flask import Flask
app = Flask(__name__)

Flask類(lèi)構(gòu)造函數(shù)唯一需要的參數(shù)就是應(yīng)用程序的主模塊或包。對(duì)于大多數(shù)應(yīng)用程序,Python的__name__變量就是那個(gè)正確的、你需要傳遞的值。

  

注:對(duì)于Flask開(kāi)發(fā)者來(lái)說(shuō),傳給Flask應(yīng)用程序構(gòu)造函數(shù)的name參數(shù)是比較容易弄混淆的。Flask使用這個(gè)參數(shù)來(lái)確定應(yīng)用程序的根目錄,這樣以后可以相對(duì)這個(gè)路徑來(lái)找到資源文件。

稍后你可以看到更復(fù)雜的應(yīng)用程序?qū)嵗跏蓟菍?duì)于簡(jiǎn)單應(yīng)用程序這些已經(jīng)足夠了。

2、路由和視圖函數(shù)

客戶(hù)端例如web瀏覽器發(fā)送 請(qǐng)求 給web服務(wù),進(jìn)而將它們發(fā)送給Flask應(yīng)用程序?qū)嵗?yīng)用程序?qū)嵗枰缹?duì)于各個(gè)URL請(qǐng)求需要運(yùn)行哪些代碼,所以它給Python函數(shù)建立了一個(gè)URLs映射。這些在URL和函數(shù)之間建立聯(lián)系的操作被稱(chēng)之為 路由 。

在Flask應(yīng)程序中定義路由的最便捷的方式是通過(guò)顯示定義在應(yīng)用程序?qū)嵗系?b>app.route裝飾器,注冊(cè)被裝飾的函數(shù)來(lái)作為一個(gè)路由。下面的例子會(huì)演示怎樣使用裝飾器來(lái)申明一個(gè)路由:

@app.route("/")
def index():
    return "

Hello World!

"
  

注:裝飾器是Python語(yǔ)言的標(biāo)準(zhǔn)特性;它們可以以不同方式改變函數(shù)的行為。一個(gè)常見(jiàn)的模式是使用裝飾器來(lái)注冊(cè)函數(shù)作為一個(gè)事件處理程序。

在上一個(gè)示例給應(yīng)用程序的根URL注冊(cè)index()函數(shù)作為事件的處理程序。如果這個(gè)應(yīng)用程序被部署在服務(wù)器上并綁定了 www.example.com 域名,然后在你的瀏覽器地址欄中輸入 http://www.example.com 將觸發(fā)index()來(lái)運(yùn)行服務(wù)??蛻?hù)端接收到的這個(gè)函數(shù)的返回值被稱(chēng)為 響應(yīng) 。如果客戶(hù)端是web瀏覽器,響應(yīng)則是顯示給用戶(hù)的文檔。

類(lèi)似于index()的函數(shù)被稱(chēng)作 視圖函數(shù) 。通過(guò)視圖返回的響應(yīng)可以是簡(jiǎn)單的HTML內(nèi)容的字符串,但它也可以市更復(fù)雜的形式,正如您將看到的。

  

注:響應(yīng)字符串嵌入在Python代碼中導(dǎo)致代碼難以掌控,在此只是介紹響應(yīng)的概念。你將在第三章學(xué)習(xí)正確的方法來(lái)生成響應(yīng)。

如果你注意到你每天使用的一些網(wǎng)站URLs如何形成的,你將會(huì)發(fā)現(xiàn)很多都有變量。例如,你的Facebook個(gè)人信息頁(yè)的URL是 http://www.facebook.com/ ,所以你的用戶(hù)名是它的一部分。Flask在路由裝飾器中使用特殊的語(yǔ)法支持這些類(lèi)型的URLs。下面的示例定義了一個(gè)擁有動(dòng)態(tài)名稱(chēng)組件的路由:

@app.route("/user/") 
def user(name):
    return "

Hello, %s!

" % name

用尖括號(hào)括起來(lái)的部分是動(dòng)態(tài)的部分,所以任何URLs匹配到靜態(tài)部分都將映射到這個(gè)路由。當(dāng)視圖函數(shù)被調(diào)用,F(xiàn)lask發(fā)送動(dòng)態(tài)組件作為一個(gè)參數(shù)。在前面的示例的視圖函數(shù)中,這個(gè)參數(shù)是用于生成一個(gè)個(gè)性的問(wèn)候作為響應(yīng)。

在路由中動(dòng)態(tài)組件默認(rèn)為字符串,但是可以定義為其他類(lèi)型。例如,路由/user/只匹配有一個(gè)整數(shù)在id動(dòng)態(tài)段的URLs。Flask路由支持int、float和path。path同樣是字符串類(lèi)型,但并不認(rèn)為斜杠是分隔符,而認(rèn)為它們是動(dòng)態(tài)組件的一部分。

3、服務(wù)啟動(dòng)

應(yīng)用程序?qū)嵗幸粋€(gè)run方法用于啟動(dòng)Flask集成的web服務(wù):

if __name__ == "__main__":
    app.run(debug=True)

__name__ == "__main__"在此處使用是用于確保web服務(wù)已經(jīng)啟動(dòng)當(dāng)腳本被立即執(zhí)行。當(dāng)腳本被另一個(gè)腳本導(dǎo)入,它被看做父腳本將啟動(dòng)不同的服務(wù),所以app.run()調(diào)用會(huì)被跳過(guò)。

一旦服務(wù)啟動(dòng),它將進(jìn)入循環(huán)等待請(qǐng)求并為之服務(wù)。這個(gè)循環(huán)持續(xù)到應(yīng)用程序停止,例如通過(guò)按下Ctrl-C

有幾個(gè)選項(xiàng)參數(shù)可以給app.run()配置web服務(wù)的操作模式。在開(kāi)發(fā)期間,可以很方便的開(kāi)啟debug模式,將激活 debuggerreloader 。這樣做是通過(guò)傳遞debug為T(mén)rue來(lái)實(shí)現(xiàn)的。

  

注:Flask提供的web服務(wù)并不用于生產(chǎn)環(huán)境。你將在十七章學(xué)習(xí)生產(chǎn)環(huán)境的web服務(wù)。

4、一個(gè)完整的應(yīng)用程序

在上一節(jié),你學(xué)習(xí)了Flask web應(yīng)用程序的不同部分,現(xiàn)在是時(shí)候?qū)懸粋€(gè)了。整個(gè) hello.py 應(yīng)用程序腳本只不過(guò)將前面描述的三個(gè)部分結(jié)合在一個(gè)文件中。應(yīng)用程序示例2-1所示。

示例2-1 hello.py:一個(gè)完整的Flask應(yīng)用程序

from flask import Flask
app = Flask(__name__)

@app.route("/")
def index():
    return "

Hello World!

" if __name__ == "__main__": app.run(debug=True)
  

建議:如果你有克隆在GitHub上的應(yīng)用程序,你現(xiàn)在可以運(yùn)行git checkout 2a來(lái)切換到這個(gè)版本的應(yīng)用程序。

運(yùn)行應(yīng)用程序之前,請(qǐng)確保你在之前創(chuàng)建的虛擬環(huán)境已經(jīng)是激活狀態(tài)且已安裝Flask?,F(xiàn)在打開(kāi)你的web瀏覽器并在地址欄輸入 http://127.0.0.1:5000/ 。圖像2-1顯示連接到應(yīng)用程序后的web瀏覽器。

圖像2-1 hello.py Flask應(yīng)用程序

然后輸入以下命令啟動(dòng)應(yīng)用程序:

(venv) $ python hello.py
 * Running on http://127.0.0.1:5000/
 * Restarting with reloader

如果你輸入任何其他URL,應(yīng)用程序?qū)⒉恢廊绾尾僮魉⑶覍⒎祷劐e(cuò)誤代碼404給瀏覽器——當(dāng)你訪問(wèn)一個(gè)不存在的網(wǎng)頁(yè)也會(huì)得到該錯(cuò)誤。

示例2-2所示應(yīng)用程序的增強(qiáng)版添加了第二個(gè)動(dòng)態(tài)路由。當(dāng)你訪問(wèn)這個(gè)URI,你應(yīng)該可以看到一個(gè)個(gè)性的問(wèn)候。

示例2-2 hello.py:帶有動(dòng)態(tài)路由的Flask應(yīng)用程序

from flask import Flask
app = Flask(__name__)

@app.route("/")
def index():
    return "

Hello World!

" @app.route("/user/") def user(name): return "

Hello, %s!

" % name if __name__ == "__main__": app.run(debug=True)
  

建議:如果你有克隆在GitHub上的應(yīng)用程序,你現(xiàn)在可以運(yùn)行git checkout 2b來(lái)切換到這個(gè)版本的應(yīng)用程序。

測(cè)試動(dòng)態(tài)路由,確保服務(wù)正在運(yùn)行隨后訪問(wèn) http://localhost:5000/user/Dave 。生成的應(yīng)用程序會(huì)使用動(dòng)態(tài)參數(shù)名響應(yīng)一個(gè)定制的問(wèn)候。嘗試不同的名稱(chēng),看看視圖函數(shù)總是生成響應(yīng)基于給定的名稱(chēng)。圖像2-2展示的一個(gè)示例。

圖像2-2 hello.py 動(dòng)態(tài)路由

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/37419.html

相關(guān)文章

  • Flask Web Development —— 基本應(yīng)用程序結(jié)構(gòu)(下)

    摘要:有兩類(lèi)應(yīng)用級(jí)和請(qǐng)求級(jí)。一個(gè)響應(yīng)中非常重要的部分是狀態(tài)碼,默認(rèn)設(shè)置來(lái)指示請(qǐng)求已經(jīng)成功處理。重定向通常由響應(yīng)狀態(tài)碼注明并且重定向的由頭部的給出。因?yàn)檫@些變化,應(yīng)用程序獲得一組基本的命令行選項(xiàng)。運(yùn)行顯示可用信息在應(yīng)用程序上下文的內(nèi)部運(yùn)行一個(gè)。 5、請(qǐng)求-響應(yīng)循環(huán) 現(xiàn)在你已經(jīng)玩過(guò)一個(gè)基本的Flask應(yīng)用程序,你也許想要知道更多關(guān)于Flask如何施展魔力。下面章節(jié)描述了一些框架設(shè)計(jì)方面的特點(diǎn)。...

    caohaoyu 評(píng)論0 收藏0
  • Flask Web Development —— 大型應(yīng)用程序結(jié)構(gòu)

    摘要:被定義在包的構(gòu)造函數(shù)中的應(yīng)用程序工廠函數(shù)會(huì)在示例中展示。這個(gè)構(gòu)造函數(shù)導(dǎo)入大部分當(dāng)前需要使用的擴(kuò)展,但因?yàn)闆](méi)有應(yīng)用程序?qū)嵗跏蓟鼈?,它可以被?chuàng)建但不初始化通過(guò)不傳遞參數(shù)給它們的構(gòu)造函數(shù)。而應(yīng)用程序范圍內(nèi)的錯(cuò)誤處理則必須使用。 雖然小型web應(yīng)用程序用單個(gè)腳本可以很方便,但這種方法卻不能很好地?cái)U(kuò)展。隨著應(yīng)用變得復(fù)雜,在單個(gè)大的源文件中處理會(huì)變得問(wèn)題重重。 與大多數(shù)其他web框架不同,F(xiàn)l...

    chemzqm 評(píng)論0 收藏0
  • Flask Web Development —— 大型應(yīng)用程序結(jié)構(gòu)(下)

    摘要:?jiǎn)卧獪y(cè)試這個(gè)應(yīng)用非常小以至于不需要太多的測(cè)試,但是作為示例會(huì)在示例中展示兩個(gè)簡(jiǎn)單的測(cè)試定義。示例單元測(cè)試編寫(xiě)好的測(cè)試使用的是來(lái)自于標(biāo)準(zhǔn)庫(kù)中標(biāo)準(zhǔn)的包。為了運(yùn)行單元測(cè)試,可以在腳本中增加一個(gè)自定義的命令。 4、啟動(dòng)腳本 頂層目錄中的manage.py文件用于啟動(dòng)應(yīng)用。這個(gè)腳本會(huì)在示例7-8中展示。 示例7-8. manage.py:?jiǎn)?dòng)腳本 #!/usr/bin/env python im...

    whidy 評(píng)論0 收藏0
  • Flask Web Development —— 模板(中)

    摘要:示例使用的模板的指令通過(guò)從引用來(lái)實(shí)現(xiàn)模板的繼承。上面的模板定義了三個(gè),分別命名為和。同時(shí)返回相應(yīng)錯(cuò)誤的數(shù)字狀態(tài)碼。示例帶有導(dǎo)航欄的基礎(chǔ)應(yīng)用程序模板這個(gè)模板中的塊中只是一個(gè)名為的元素,它包含了在派生模板中定義的名為的空。 2、集成Twitter Bootstrap的Flask-Bootstrap Bootstrap是Twitter的一個(gè)開(kāi)源框架,提供用戶(hù)交互組件來(lái)創(chuàng)建一個(gè)清新且有吸引力...

    eternalshallow 評(píng)論0 收藏0
  • Flask Web Development —— 模板(

    摘要:用真實(shí)的值替換變量并返回最終響應(yīng)字符串,這個(gè)過(guò)程稱(chēng)為渲染。示例展示模板實(shí)現(xiàn)該響應(yīng)??刂平Y(jié)構(gòu)提供一些控制結(jié)構(gòu)用于改變模板流。這個(gè)示例展示如何使用循環(huán)做到這些同樣支持宏,這和代碼中的函數(shù)很像。 寫(xiě)代碼最關(guān)鍵的是要易于維護(hù)且結(jié)構(gòu)清晰整潔。目前為止,你看到的例子都過(guò)于簡(jiǎn)單從而沒(méi)有做這方面的要求。Flask視圖函數(shù)希望將兩個(gè)應(yīng)該完全獨(dú)立的任務(wù)一并處理,兩個(gè)任務(wù)有兩種代碼,一并處理勢(shì)必會(huì)引發(fā)問(wèn)題。...

    fizz 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<