騰訊風(fēng)鈴做的網(wǎng)站有期限嗎優(yōu)化seo系統(tǒng)
前面講過Flask是一個輕量級Web開發(fā)框架,為什么說是輕量級的呢,因為它用短短幾行代碼就能運行起來,我們一起來看看最簡單的flask框架。
安裝Flask
在看Flask框架之前我們需要先安裝flask模塊,學(xué)過python的肯定都知道,flask模塊安裝其實很簡單,直接使用命令
pip install flask
就可以安裝好了,這里要提一點,如果你安裝模塊時,遇到下載失敗的情況,大部分是因為python默認使用官方的下載模塊地址下載,而這個地址在國內(nèi)訪問有時不太穩(wěn)定,這里推薦使用清華的下載源下載,速度能快很多,也不會經(jīng)常出現(xiàn)報錯、超時問題。
https://pypi.tuna.tsinghua.edu.cn/simple
使用方法也很簡單,用兩種方法,第一種是在pip中加個-i
的參數(shù),后面加網(wǎng)址,就會從這個地址下載模塊,如下
pip install flask -i https://pypi.tuna.tsinghua.edu.cn/simple
上面這種方法只能是臨時下載使用,不能讓下載源永久變更,這里提供另一種方法,去變更默認下載源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
變更后,可通過pip config list
查看是否更改成功,如果更改成功,會顯示如下
(.venv) ?? pip config list
global.index-url='https://pypi.tuna.tsinghua.edu.cn/simple'
一個最小且完整的Flask程序
Flask安裝成功后,我們就可以看一個示例了,這是一個完整的flask程序,也是flask運行起來需要的小單元,我們將以下代碼保存到一個py文件中,如my_flask.py
from flask import Flaskapp = Flask(__name__)@app.route('/')
def index():return "Hello, World!"if __name__ == '__main__':app.run(debug=True)
如上面的代碼所示,短短10行代碼,就可以讓flask跑起來,所以說flask是一個輕量級的web框架。別看上面的代碼短,但是它五臟俱全,包含了flask運行起來的所有內(nèi)容,應(yīng)用實例、路由和視圖函數(shù)就構(gòu)成了一個最簡單的Flask程序
應(yīng)用實例
應(yīng)用實例,實際上就是Flask的應(yīng)用對象,這里說的對象可不是你的女朋友,而是一個可以包含請求處理、路由分發(fā)、視圖函數(shù)調(diào)用的Web應(yīng)用核心,也就是那句app = Flask(__name__)
,如果我們?nèi)タ碏lask這個實例的源碼就能發(fā)現(xiàn),里面包含了很多內(nèi)容,如運行啟動參數(shù)、路由規(guī)則、收發(fā)請求的方式定義等等,這里就不詳細展開說了。
路由
路由是用來處理URL和函數(shù)之間對應(yīng)關(guān)系的。這里我們就必須要講下web的整個工作原理,來方便理解,首先看下圖
Web瀏覽器發(fā)起請求,Web服務(wù)器收到請求并把請求發(fā)送給Flask應(yīng)用程序,Flask應(yīng)用程序收到請求的URL后,找對應(yīng)的處理函數(shù),這就是整個路由的工作原理。
而對應(yīng)到上面的程序,就是那個函數(shù)
@app.route('/')
def index():return "Hello, World!"
如果python學(xué)的相對深入一點兒的話,就能知道上面代碼中的@app.route('/')
是一個裝飾器,用來注冊視圖函數(shù),其后括號中的內(nèi)容就是要使用的路徑,'/'
就表示根路徑,即http://127.0.0.1:5000
;如果改為‘/login/’
就表示使用login路徑,即http://127.0.0.1:5000/login/
;如果寫成'/user/<name>'
就變成了動態(tài)可變路由,即那個<name>
會根據(jù)傳輸?shù)膬?nèi)容動態(tài)變化,比如http://127.0.0.1:5000/user/jay
,這個jay就需要瀏覽器附倒路由中。
這是Flask中給做了簡化,方便使用,實際傳統(tǒng)方式定義路由并非使用裝飾器,由于傳統(tǒng)方式已經(jīng)不常用,這里就不詳細說了。
路由這里還有一點必須提下,那就是Flask的動態(tài)可變路由僅支持string、int、float、path幾種類型,比如上面的<name>
就是用的string類型,這個類型默認是不用寫出來的,可以匹配除斜線(/)之外的任何字符序列。而其他幾個類型,如果需要識別,就要寫出類型,如'/path/<path:my_path>'
。
視圖函數(shù)
視圖函數(shù),就是處理入站請求的函數(shù),也就是路由中定義的那個函數(shù)
def index():return "Hello, World!"
上面這個函數(shù),就是所謂的視圖函數(shù)。它是用來處理進來的請求,并返回響應(yīng)的。
響應(yīng)
上面提到了返回響應(yīng),那響應(yīng)是什么呢?響應(yīng)就是視圖函數(shù)中返回的值,可以是字符串,也可以是復(fù)雜的表單,還可以用Flask提供的render_template()函數(shù)來返回一個html,同時響應(yīng)還可以直接使用redirect()函數(shù)將路由重定向。
啟動
上面將了Flask程序的五臟,還少一個入口讓Flask運行起來,也就是這個代碼中的最后2行
if __name__ == '__main__':app.run(debug=True)
第一行if __name__ == '__main__':
,學(xué)過python的都知道這是python的入口方式,也就是將當(dāng)前文件或模塊當(dāng)作主程序直接運行。
第二行app.run(debug=True)
則是來調(diào)用上面創(chuàng)建的Flask對象,并執(zhí)行run()函數(shù),讓Flask運行起來,而其中的debug是作為參數(shù),傳給run()函數(shù)的,讓Flask知道是在調(diào)試模式下啟動,在調(diào)試模式中Flask會自動加載 重載器 和 調(diào)試器。
然后我們到命令行,進入my_flask.py文件的目錄,命令行輸入python my_flask.py
即可啟動程序,如下圖所示。
我們打開瀏覽器輸入http://127.0.0.1:5000
即可看到Hello, World!,如下圖
到此,我們的這個完整的Flask程序應(yīng)有的概念就都講完了,當(dāng)然,這都是最基礎(chǔ)的內(nèi)容,要想完整開發(fā)一個基于flask的web應(yīng)用還有很多要學(xué)習(xí)的,如模版、數(shù)據(jù)庫、前端技術(shù)等等,筆者也是邊學(xué)邊寫,也是借鑒費曼學(xué)習(xí)法,讓自己記得更牢,如果寫的過程中有什么疏漏和錯誤,還請各位指出。