前幾天在進(jìn)行flask web開(kāi)發(fā)的時(shí)候,雖然照貓畫(huà)虎能夠?qū)懸恍┖?jiǎn)單的程序,不過(guò)感覺(jué)基礎(chǔ)有點(diǎn)薄弱,經(jīng)常寫(xiě)著寫(xiě)著就卡殼,很尷尬,所以打算先根據(jù)網(wǎng)上的一些開(kāi)發(fā)教程認(rèn)真學(xué)習(xí)學(xué)習(xí),打好基礎(chǔ),畢竟磨刀不誤砍柴!
Flask IDE配置相關(guān)
1、virtualenv的使用
virtualenv簡(jiǎn)單的理解就是一個(gè)虛擬環(huán)境,之所以用這個(gè)是為了避免不同的開(kāi)發(fā)環(huán)境由于python版本而帶來(lái)的影響,一句話,避免互相干擾。
virtualenv安裝命令
pip install virtualenv
virtualenv搭建環(huán)境命令
virtualenv venv
這里需要注意,最好安裝在開(kāi)發(fā)項(xiàng)目目錄下,比如我們的開(kāi)發(fā)目錄為followstudy,進(jìn)入這個(gè)目錄后,然后在命令行執(zhí)行。其中venv為虛擬環(huán)境的名稱,你也可以起名為其他的。安裝成功之后的目錄結(jié)構(gòu)如下圖:
安裝成功之后,我們需要對(duì)項(xiàng)目指定開(kāi)發(fā)環(huán)境(叫法可能有點(diǎn)問(wèn)題),具體的話在pycharm的File->default setting中查找。
把上圖中藍(lán)色方框的路徑設(shè)置為剛剛venv環(huán)境的路徑,比如我們這里是下面的路徑。
virtualenv環(huán)境啟用
source venv/bin/activate
啟用的時(shí)候,命令不是固定的,這個(gè)命令的venv是可變的,具體的話取決于我們的虛擬環(huán)境的命名,總之一句話,需要激活虛擬環(huán)境下的bin目錄下的activate,啟用成功之后,我們可以看到當(dāng)前命令行前面有一個(gè)(venv),以后開(kāi)發(fā)的過(guò)程需要先激活這個(gè)虛擬環(huán)境,然后再進(jìn)行,另外當(dāng)我們不需要虛擬環(huán)境的話,可以直接在當(dāng)前命令下輸入:deactivate,這樣就退出了當(dāng)前的虛擬環(huán)境。
flask安裝命令
pip install flask
在當(dāng)前虛擬環(huán)境下使用上面的命令,可以快速安裝flask及flask所依賴的包。
安裝成功之后,開(kāi)始第一個(gè)flask的例子——sample,在開(kāi)始之前,先建議個(gè)目錄/sample。
然后創(chuàng)建sample.py文件,pycharm默認(rèn)有flask main樣例,可以直接copy,也可以進(jìn)行手打。
上面就是flask最基本的一個(gè)應(yīng)用,第一行代碼是引入Flask,然后第二行代碼是實(shí)例化app。第三行代買是裝飾器,指定路由的,當(dāng)訪問(wèn)網(wǎng)址的時(shí)候,調(diào)用函數(shù)index(),然后函數(shù)返回“hello world”字符串。
if name == 'main':
app.run(debug=True)
這個(gè)是用于啟動(dòng)程序的,說(shuō)實(shí)話,不是很理解,約定俗成吧,debug=True是開(kāi)啟調(diào)試模式。
然后我們?cè)诿钚邢峦ㄟ^(guò) python sample.py運(yùn)行程序。(注意一定要在sample目錄下運(yùn)行這個(gè)命令)
如果出現(xiàn)上面的信息,那就說(shuō)明程序啟動(dòng)成功,這個(gè)時(shí)候可以通過(guò)瀏覽器訪問(wèn):http://127.0.0.1:5000/ 這個(gè)時(shí)候會(huì)看到如下的內(nèi)容。
其中的hello world就是我們剛剛在index()函數(shù)中輸出的字符串。
flask render_template
上面的index函數(shù)是簡(jiǎn)單的一些字符串,顯然并不是很漂亮的,這個(gè)時(shí)候我們可能需要用到flask的模板引擎——jinja2,jinja2功能比較強(qiáng)大,我們先根據(jù)例子簡(jiǎn)單來(lái)一個(gè)。默認(rèn)的情況下flask模板文件存放在app下的templates,一個(gè)就不建議大家隨意起名字了,約定俗成!首先我們?cè)赼pp文件下建立一個(gè)templates目錄,然后在這個(gè)目錄下建立一個(gè)index.html的文件。
建立好之后,我們需要利用render_template把flask后端的數(shù)據(jù)傳到html里,在開(kāi)始使用render_template之前,我們需要引入,這個(gè)也在flask中,直接使用import引入就可以。
from flask import Flask, render_template
app = Flask(name)
@app.route('/')
def index():
return render_template('index.html', title="hello world")
if name == 'main':
app.run(debug=True)
在html文件中,我們把需要展示hello world的地方用 {{ title }}替換就可以,這里可以簡(jiǎn)單記憶,sample.py文件中的hello world賦值給變量title,然后在html文件中使用{{ title }}調(diào)用數(shù)據(jù)。
這個(gè)時(shí)候我們就可以在瀏覽器中刷新剛才的頁(yè)面,不出意外會(huì)返回同樣的結(jié)果,或者你也可以在模板中加個(gè)h1標(biāo)簽,這樣效果可能會(huì)更明顯點(diǎn)。
flask route路由
前面簡(jiǎn)單地使用了一個(gè)app.route('/'),為了更好地理解route,我們需要搭建更多的路由,進(jìn)一步學(xué)習(xí)。
新添加了兩個(gè)路由,一個(gè)是about,另一個(gè)是service/ 區(qū)別之處,細(xì)心的話可以看到,一個(gè)結(jié)尾有“/”,另一個(gè)是結(jié)尾沒(méi)有“/”的。
當(dāng)訪問(wèn)127.0.0.1:5000/about 的時(shí)候,能夠出現(xiàn)about頁(yè)面的內(nèi)容。
當(dāng)訪問(wèn)127.0.0.1:5000/about/的時(shí)候會(huì)報(bào)錯(cuò)(404類型)。
但是當(dāng)我們?cè)L問(wèn)127.0.0.1:5000/service的時(shí)候,url會(huì)自動(dòng)301重定向到127.0.0.1:5000/service/,然后返回service頁(yè)面的內(nèi)容。這是flask路由的一個(gè)特性,如果是目錄的話 建議加上"/"。如果是page頁(yè)面的話,就沒(méi)必要加。
flask url_for
url_for是flask中用于路徑定位的一個(gè)東西(不知道我理解的對(duì)不對(duì)。。。),通常來(lái)說(shuō)url_for主要用作兩個(gè)用途,一個(gè)是用來(lái)做視圖函數(shù)的綁定,另一個(gè)是用來(lái)定位靜態(tài)資源的。
flask url_for視圖綁定
上圖中的a標(biāo)簽中的url_for就是用來(lái)進(jìn)行視圖函數(shù)的綁定,其中的about、service不是路由名稱,是應(yīng)用中的視圖函數(shù)。其中前面的“.”是指當(dāng)前應(yīng)用。這樣我們?cè)L問(wèn)首頁(yè)的時(shí)候就可以看到下面的內(nèi)容,而且鏈接都是可用的。
flask url_for定位靜態(tài)資源
上面的頁(yè)面顯然并不是很好看,在web開(kāi)發(fā)中,我們經(jīng)常會(huì)用到一些樣式,其中樣式文件存放在static目錄下,所以開(kāi)始定位靜態(tài)資源前,我們首先先建一個(gè)static資源目錄,然后在資源目錄static建立一個(gè)樣式文件site.css。
建好site.css文件之后,我們就需要引入這個(gè)樣式到我們的index.html文件中,這就要用到flask中的url_for
這里的url_for主要用于定位靜態(tài)資源,其中第一個(gè)參數(shù)為靜態(tài)資源目錄static,另一個(gè)filename的值是具體的那個(gè)文件,這里是site.css,有時(shí)候site.css位于static/css目錄下,那么這個(gè)時(shí)候filename的值就應(yīng)該是css/site.css,然后這個(gè)時(shí)候我們刷新我們的頁(yè)面就可以看到樣式已經(jīng)應(yīng)用進(jìn)去了。
上面就是今天的學(xué)習(xí)筆記,明天繼續(xù)歡迎關(guān)注小蝦的公眾號(hào)哈