鏈接
flask web開發(fā)中画髓,對鏈接的介紹比較少(可能后面還有掘剪,暫時沒看到那)。
使用鏈接的地方有很多奈虾,例如:導(dǎo)航條夺谁,新聞列表等等。
其實靜態(tài)鏈接不難肉微,我們可以直接在基礎(chǔ)模板中定義好鏈接予权。但是對于那些動態(tài)鏈接怎么辦呢?Flask提供了url_for()輔助函數(shù)浪册,他可以使用程序URL映射中保存的信息生成URL(其實我也不知道什么意思扫腺,應(yīng)該是和參數(shù)有關(guān))。
動態(tài)鏈接為什么不能直接編寫村象?
- 直接編寫URL會對代碼中定義的路由產(chǎn)生不必要的依賴關(guān)系笆环。如果重新定義路由,模板中的鏈接就會失效厚者。
url_for()輔助函數(shù)最簡單的用法是以視圖函數(shù)名作為參數(shù)躁劣,返回對應(yīng)的URL。
我們在創(chuàng)建一個flask項目時库菲,有一個Index()函數(shù)账忘,程序中調(diào)用url_for('index'),得到的結(jié)果是/(根路徑)。
調(diào)用url_for('index', _external = True)返回的是絕對地址鳖擒,也就是http://localhost:5000/溉浙。
關(guān)于絕對地址和相對地址:程序內(nèi)部的鏈接使用相對地址就行,如果訪問外部地址必須使用絕對地址蒋荚。
那到底怎么訪問動態(tài)地址戳稽?
將動態(tài)部分當(dāng)做參數(shù)傳給url_for()輔助函數(shù)。例如:
url_for('user', name = 'john', _external = True)
那么上面這個輔助函數(shù)的返回結(jié)果就是期升,http://localhost:5000/user/john惊奇。
輔助函數(shù)url_for()的參數(shù)不局限于動態(tài)路由中的參數(shù),也可以傳入任何額外參數(shù)添加到查詢字符串中播赁。
例如:url_for('index', page = 2)的返回結(jié)果是 /?page=2颂郎。
靜態(tài)文件
web程序不僅由Python代碼和模板(template)組成,多數(shù)程序還會使用靜態(tài)文件容为,例如HTML靜態(tài)頁面乓序,JS源碼文件,CSS文件舟奠。
對靜態(tài)文件引用會被當(dāng)做一個特殊的路由,/static/<filename>房维。
例如沼瘫,調(diào)用url_for('static', filename = 'css/styles.css', _external = True),得到的結(jié)果是http://localhost:5000/static/css/styles.css咙俩。
默認(rèn)情況下耿戚,F(xiàn)lask在程序的根目錄下有一個static文件夾,我們可以把靜態(tài)文件都放在這個文件夾里阿趁。
如果服務(wù)器收到static開頭的路徑的請求膜蛔,會生成一個響應(yīng),包含文件系統(tǒng)中static/css/styles.css(這種格式)文件的內(nèi)容脖阵。