前言
本教程來自The Flask Mega-Tutorial的譯本,選用的Makedown編輯器為REMARKABLE,實驗環(huán)境為Ubuntu18.04,Python版本為 3.7.1,由于才開始接觸Makedown語法,行文風(fēng)格參考了此文翻譯,在此向譯者致敬。
安裝Python的過程被略去,若你還沒有安裝Python,此處建議安裝Anaconda。
安裝Flask
Python有公共倉庫來托管第三方的包,我們可以通過<code>pip3</code>安裝,基本格式如下:(注:若ubuntu中同時有Python2.x和3.x,<code>pip</code>默認(rèn)為Python2安裝,要為Python3安裝需使用<code>pip3</code>)
pip3 install <package-name>
在此涉及到版本問題所引起的故障,可以參考第一行Python代碼寫的此篇文章,通過使用虛擬環(huán)境可以解決這個問題,我們先創(chuàng)建項目目錄,將此應(yīng)用命名為microblog:
mkdir microblog
cd microblog
在Python3中創(chuàng)建此虛擬環(huán)境的命令為:
python3 -m venv venv
若提示缺少依賴,在Ubuntu中可以使用此命令安裝依賴sudo apt-get install python3-venv,命令執(zhí)行成功的話會在microblog目錄下生成一個venv文件夾,首先查看自己的Python是否包含了virtualenv,通過使用此命令可以來確認(rèn):
virtualenv venv
若提示錯誤則需下載virtualenv,創(chuàng)建完后可以使用以下命令激活:
source venv/bin/activate
前面出現(xiàn)(venv)表示虛擬環(huán)境激活,在虛擬環(huán)境中安裝Flask
(venv) $ pip3 install flask
測試可以通過導(dǎo)入模塊來進行,打開解釋器>>> import flask沒有拋出異常即為成"
"Hello,World"Flask應(yīng)用
Flask網(wǎng)站提供了應(yīng)用實例,讓我們從Hello,World開始這段奇妙之旅,在此先理解一下Python中module和package
moduel:一個eg.py即為module,eg為模塊名(注:在C中一般稱為lib,但在Python中,一般稱為moduel)
package:一個有層次的文件目錄,一定含有__init__.py,定義了由一組moduel組成的應(yīng)用環(huán)境。
我們創(chuàng)建一個名為app的package來存放應(yīng)用,創(chuàng)建__init__.py來使文件夾變?yōu)?code>package。
__init__.py:控制著包的導(dǎo)入行為,目的是包含不同運行級別的包的可選的初始化代碼,用以自動加載子模塊,具體用法可以參考Python3-cookbook。
在__init__.py中輸入如下代碼:
from flask import Flask
app = Flask(__name__)
from app import routes
此處app = Flask(__name__)中創(chuàng)建了Flask的實例,參數(shù)name,告訴了falsk了Application的名字,官方文檔中有:If you are using a single module,__name__ is always the correct value. If you however are using a package, it’s usually recommended to hardcode the name of your package there.
在Flask中,應(yīng)用程序路由的處理邏輯被編寫為Python函數(shù),稱為視圖函數(shù)。 視圖函數(shù)被映射到一個或多個路由URL,以便Flask知道當(dāng)客戶端請求給定的URL時執(zhí)行什么邏輯。在app/routes.py中 實現(xiàn)了視圖函數(shù)
from app import app
@app.route('/')
@app.route('/index')
def index():
return "Hello, World!"
在Python中@符號稱為裝飾器的語法糖,關(guān)于裝飾器更詳細的了解可以參考流暢的Python,@app.route裝飾器將路徑/和/index關(guān)聯(lián)到index函數(shù),這樣在訪問這兩個URL時將調(diào)用此函數(shù)并將返回值作為響應(yīng)傳遞給瀏覽器。
要完成應(yīng)用程序還需要在microblog目錄下創(chuàng)建一個名為microblog.py的腳本,通過此來導(dǎo)入應(yīng)用實例:
from app import app
此處第一個app為包名(包含文件的init.py文件夾),第二個是包中導(dǎo)入app對象,在設(shè)置完FLASK_APP環(huán)境變量就可以運行第一個程序了,命令如下:
export FLASK_APP=microblog.py
用此種方法在每次運行之前都得設(shè)置環(huán)境變量,通過設(shè)置可以只會在運行flask命令時自動注冊生效的環(huán)境變量首先安裝python-dotenv
pip3 install python-dotenv
安裝后在microblog目錄下新建一個.flaskenv的文件,內(nèi)容是:
FLASK_APP=microblog.py
在虛擬環(huán)境中,通過運行flask run就成功運行了構(gòu)筑的第一個Web應(yīng)用了。通過輸出可以看到服務(wù)器運行在127.0.0.1上,使用127.0.0.1:5000就可以看到構(gòu)筑的Hello,World頁面了。
補充
為了更好地理解from app import app,下面對實例使用my_app進行重命名,則在__init__.py中代碼修改:
from flask import Flask
my_app = Flask(__name__)
from app import routes
在此處創(chuàng)建的對象為my_app,這樣就可以來進行區(qū)分了,相應(yīng)的在microblog.py和routes.py也得進行更改
#microblog.py
from app import my_app
#routes.py
from app import my_app
@my_app.route('/')
@my_app.route('/index')
def index():
return("月亮與六便士")
運行結(jié)果如圖:
