Python web框架:flask視圖函數(shù) 1.Django中的CBV模式 2.Flask中的CBV和FBV def auth(func): def inner(*args, **kwargs): result = func(*args, **kwargs) return result return inne.
創(chuàng)新互聯(lián)建站于2013年創(chuàng)立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元開封做網(wǎng)站,已為上家服務(wù),為開封各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792
python的一切數(shù)據(jù)類型都是對(duì)象。但是python的對(duì)象分為不可變對(duì)象和可變對(duì)象。python的變量是引用,對(duì)python變量的賦值是引用去綁定該對(duì)象。
可變對(duì)象的數(shù)據(jù)發(fā)生改變,例如列表和字典,引用不會(huì)更改綁定對(duì)象,畢竟本身就是用于增刪改查的,頻繁地產(chǎn)生新對(duì)象必然導(dǎo)致開銷巨大,只需要該對(duì)象內(nèi)部變化就行;但對(duì)于綁定了不可變對(duì)象的引用,對(duì)象一旦改變就會(huì)使引用綁定新的對(duì)象。
這一點(diǎn)也會(huì)反應(yīng)到函數(shù)的參數(shù)上。python的傳值方式是“傳對(duì)象”引用。python的函數(shù),形參實(shí)際上是引用,實(shí)參便是對(duì)象綁定到該引用上。本質(zhì)是形參會(huì)被作為函數(shù)的局部變量,在開辟的函數(shù)的棧內(nèi)存中被聲明。
簡(jiǎn)要來講:
如果參數(shù)是數(shù),則類似值傳遞,
如果參數(shù)是列表和字典,則類似引用傳遞。
每個(gè)對(duì)象都會(huì)有個(gè)id, 可以用id()驗(yàn)證以上說法:
這個(gè)函數(shù)的參數(shù)是列表,是可變對(duì)象。
python
英 [?pa?θ?n] 美 [?pa?θɑ:n]
n. 巨蛇,大蟒
摘要: Flask , 視圖 , 視圖函數(shù) , 類視圖 , 方法視圖 , 裝飾器 , 藍(lán)圖
在Flask中 路由 是指用戶請(qǐng)求的 URL 與 視圖函數(shù) 之間的 映射 ,處理URL和函數(shù)之間關(guān)系的程序稱為路由。Flask根據(jù)HTTP請(qǐng)求的URL在路由表中匹配預(yù)定義的URL找到對(duì)應(yīng)的視圖函數(shù)。將視圖函數(shù)的執(zhí)行結(jié)果返回給服務(wù)器。
Flask中默認(rèn)使用 @app.route 裝飾器將視圖函數(shù)和URL綁定,裝飾器是一種接受函數(shù)的函數(shù),返回新的函數(shù)。
使用裝飾器將視圖函數(shù)page和url '/'關(guān)系綁定帶 app.url_map 屬性上,打印app.url_map的結(jié)果如下,有兩條url規(guī)則,分別是根目錄下的URL規(guī)則和static目錄下的URL規(guī)則
可以給裝飾器增加 endpoint 參數(shù)給 url命名 ,一旦使用了endpoint參數(shù) url_for 反轉(zhuǎn)就不能使用視圖函數(shù)名了而要使用定義的url名。
url_for('index')的輸出是字符串格式url的內(nèi)容"/"
也可以不使用裝飾器,使用 add_url_rule 將視圖函數(shù)和url綁定,裝飾器 @app.route 實(shí)際是調(diào)用的 add_url_rule 方法
視圖函數(shù)也可以結(jié)合類來實(shí)現(xiàn),類視圖的好處是支持 繼承 ,可以將共性的東西放到父類中,類視圖需要使用 app.add_url_rule() 來進(jìn)行注冊(cè),類視圖分為 標(biāo)準(zhǔn)類視圖 和 基于調(diào)度方法的類視圖
標(biāo)準(zhǔn)類視圖有標(biāo)準(zhǔn)的寫法
使用類視圖,在父類中定義一個(gè)屬性,在子類中完成各自的業(yè)務(wù)邏輯,同時(shí)都繼承父類中的這一個(gè)屬性
分別定義三個(gè)子類的模板
查看結(jié)果,三個(gè)url的返回除了三個(gè)模板各自的內(nèi)容外都需要輸出父類的ads屬性
如果同一個(gè)視圖函數(shù)需要根據(jù) 不同的請(qǐng)求方式 進(jìn)行不一樣的邏輯處理,需要在視圖函數(shù)內(nèi)部進(jìn)行判斷,可以使用 方法類視圖 實(shí)現(xiàn),使用類繼承 flask.views.MethodView ,定義和請(qǐng)求方式 同名的小寫方法 來完成了邏輯處理。
編輯一個(gè)頁面直接訪問是輸出用戶名密碼頁面,提交表單后是密碼正確與否的提示。
在html中定義 form 標(biāo)簽action屬性關(guān)聯(lián)url名
如果不用方法視圖實(shí)現(xiàn)需要在普通視圖內(nèi)部調(diào)用 request.method 判斷是否為 GET , POST 進(jìn)行判斷
裝飾器的本質(zhì)是一個(gè)Python函數(shù), 接受一個(gè)函數(shù) , 返回一個(gè)函數(shù) ,目的是讓一個(gè)函數(shù)獲得 其他額外的功能 。
假設(shè)一個(gè)場(chǎng)景訪問新聞詳情頁又一個(gè)函數(shù)實(shí)現(xiàn),但是之前必須先登錄,登錄由另一個(gè)函數(shù)實(shí)現(xiàn),此時(shí)需要將訪問新聞函數(shù)傳遞給登錄函數(shù)返回一個(gè)新的函數(shù)作為整體的邏輯實(shí)現(xiàn),這個(gè)給登錄函數(shù)增加新功能瀏覽網(wǎng)頁的過程就是裝飾器。
控制臺(tái)輸出,new_func()執(zhí)行了新函數(shù),基礎(chǔ)函數(shù)user_login執(zhí)行了新加入的功能,新函數(shù)真實(shí)的函數(shù)名還是inner
如果使用裝飾器魔法符號(hào)實(shí)現(xiàn),此時(shí)直接調(diào)用被裝飾的函數(shù)即可實(shí)現(xiàn)帶有新功能的基礎(chǔ)函數(shù),函數(shù)作為參數(shù)傳入的過程已經(jīng)自動(dòng)實(shí)現(xiàn)
在基礎(chǔ)函數(shù)和要包裝的函數(shù)上都支持傳遞參數(shù)
查看 app.route() 的源碼內(nèi)部也是將視圖函數(shù)包裝,在原函數(shù)執(zhí)行之前調(diào)用 add_url_rule 綁定url,endpoint和視圖函數(shù)的關(guān)系,再返回原函數(shù)實(shí)現(xiàn)業(yè)務(wù)邏輯
藍(lán)圖的目的是實(shí)現(xiàn) 各個(gè)模塊的視圖函數(shù)寫在不同的py文件中 ,在主視圖中導(dǎo)入分路由視圖的模塊,并注冊(cè)藍(lán)圖對(duì)象, 降低各個(gè)功能模塊的耦合度 ,使用 flask.Blueprint 定義藍(lán)圖, app.register_blueprint 注冊(cè)藍(lán)圖。
實(shí)現(xiàn)主頁,詳情頁,對(duì)比頁三個(gè)頁面,在主頁中導(dǎo)入兩個(gè)其他功能頁,先編寫兩個(gè)功能頁的藍(lán)圖detail.py和compare.py
使用 app = Blueprint('detail', __name__) 定義藍(lán)圖對(duì)象, detail 是藍(lán)圖名,藍(lán)圖名不能重復(fù)。再編寫主視圖main.py,在主視圖中注冊(cè)之前的藍(lán)圖,其他視圖函數(shù)的名字不能和藍(lán)圖名一致
查看效果
如果在藍(lán)圖的py腳本中調(diào)用了 url_for ,需要把藍(lán)圖的name(就是 name 之前的)也加入作為前綴,如下
1.建立: F:\Python\flask文件夾路徑
2.安裝virtualenv,在此路徑下打開命令行窗口輸入:
3.新建一個(gè)目錄,并在里邊創(chuàng)建virtualenv環(huán)境,在DOS下
如圖:
這時(shí)你創(chuàng)建的myproject文件夾里面就多了一個(gè)venv文件夾:
4.激活虛擬環(huán)境
現(xiàn)在命令行前面多了個(gè)(venv)表示你在venv環(huán)境內(nèi)
5.在virtualenv里安裝Flask
完成。如圖:
6.驗(yàn)證是否安裝,你可以進(jìn)入 Python 解釋器,嘗試導(dǎo)入 Flask:
如果沒有報(bào)錯(cuò),那么就安裝成功了~如圖:
1.在myproject文件夾下打開命令行:
cd app #進(jìn)入app文件夾
mkdir static
mkdir templates
我們的應(yīng)用程序包是放置于 app 文件夾中。子文件夾 static 是我們存放靜態(tài)文件像圖片,JS文件以及樣式文件。子文件夾 templates 顯然是存放模板文件。
2.為我們的 app 包(文件 app/ init .py )創(chuàng)建一個(gè)簡(jiǎn)單的初始化腳本:
上面的腳本簡(jiǎn)單地創(chuàng)建應(yīng)用對(duì)象,接著導(dǎo)入視圖模塊,該模塊我們暫未編寫。
視圖是響應(yīng)來自網(wǎng)頁瀏覽器的請(qǐng)求的處理器。在 Flask 中,視圖是編寫成 Python 函數(shù)。每一個(gè)視圖函數(shù)是映射到一個(gè)或多個(gè)請(qǐng)求的 URL。
3.讓我們編寫第一個(gè)視圖函數(shù)(文件 app/views.py ):
其實(shí)這個(gè)視圖是非常簡(jiǎn)單,它只是返回一個(gè)字符串,在客戶端的網(wǎng)頁瀏覽器上顯示。兩個(gè) route 裝飾器創(chuàng)建了從網(wǎng)址 / 以及 /index 到這個(gè)函數(shù)的映射。
4.能夠完整工作的 Web 應(yīng)用程序的最后一步是創(chuàng)建一個(gè)腳本,啟動(dòng)我們的應(yīng)用程序的開發(fā) Web 服務(wù)器。讓我們稱這個(gè)腳本為 run.py,并把它置于根目錄:
這個(gè)腳本簡(jiǎn)單地從我們的 app 包中導(dǎo)入 app 變量并且調(diào)用它的 run 方法來啟動(dòng)服務(wù)器。請(qǐng)記住 app 變量中含有我們?cè)谥皠?chuàng)建的 Flask 實(shí)例。
5.要啟動(dòng)應(yīng)用程序,您只需運(yùn)行此腳本(run.py)
如圖:
6.在服務(wù)器初始化后,它將會(huì)監(jiān)聽 5000 端口等待著連接?,F(xiàn)在打開你的網(wǎng)頁瀏覽器輸入如下 URL:
另外你也可以使用這個(gè) URL:
你看清楚了路由映射是如何工作的嗎?第一個(gè) URL 映射到 /,而第二個(gè) URL 映射到 /index。這兩個(gè)路由都關(guān)聯(lián)到我們的視圖函數(shù),因此它們的作用是一樣的。如果你輸入其它的網(wǎng)址,你將會(huì)獲得一個(gè)錯(cuò)誤,因?yàn)橹挥羞@兩個(gè) URL 映射到視圖函數(shù)。
你可以通過 Ctrl-C 來終止服務(wù)器
入門就到這里,比較簡(jiǎn)單的。
下一章:
python輕量框架--Flask(模板詳細(xì)版)
文章名稱:關(guān)于python視圖函數(shù)的信息
URL地址:http://chinadenli.net/article12/dodcidc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、App設(shè)計(jì)、微信小程序、靜態(tài)網(wǎng)站、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)