天天看點

Python3 Flask架構——第一次使用

Flask是一個輕量級的Web架構,它隻給我們提供了必須的路由和渲染,其他的功能我們可以自由選配,是以Flask的靈活度非常高,且耦合度低,可以滿足我們快速開發的需求;

接下來我們看下最最最基本的架構結構:

from flask import Flask
'''
在這裡強調一下為什麼使用的是from flask import Flask,而不是from flask import *?
首先如果這麼寫的話,可閱讀性就會比較差,别人不知道你需要導入的是什麼,也不知道對象是從哪裡導入到的;
其次,import * 的導入取決于相關庫的定義,如果沒有将方法包含進去,import * 是不會導入的,
是以我們在後面的開發中,最好使用的時候明确包名
'''

app = Flask(__name__)    # 建立flask應用對象
'''
__name__ 表示的是目前子產品的名字,即檔案的名字,如果程式運作是從這個檔案啟動的,那麼__name__就是main,如果是從其他子產品導入的,
那麼就是該子產品的檔案名
flask以這個子產品所在的目錄為總目錄,預設這個目錄的static目錄為靜态目錄,templates為模闆目錄
如果Flask(目錄名)指定錯誤,沒有找到的話,flask就會以這個檔案所在的目錄為根目錄,也就是說即使app=Flask('')也可以運作,
但是不利于後面的維護

'''

@app.route('/')        # 使用裝飾器綁定路由,将路由映射到視圖函數hello
# 什麼是路由?就是說我們通過url通路的位址(注意,我們通路不是基于本地檔案位址來的,而是通過我們定義的路由路徑來的,後面會詳細的介紹)
def hello():           # 定義視圖函數,就是說這個路由路徑當通路的時候該做些什麼事情
    return 'hello'     # 在頁面上輸出“hello”

if __name__ == '__main__':    # 這個就不介紹了,就是判斷程式是否從這個檔案啟動
    app.run()    # run()方法是提供給我們進行本地調試的方法
           

現在我們運作一下,本機位址預設是127.0.0.1,預設端口号是5000,我們可以通過下面藍色的位址在浏覽器中通路,我剛才已經通路了一次,是以下面會有日志列印出來,什麼時候通過什麼方式對頁面進行了通路:

Python3 Flask架構——第一次使用

上面說了,我們的通路位址不是通過本地檔案位址來通路的,接下來我們就看下Flask()的幾個屬性:

app = Flask(__name__,        # 在建立flask應用對象的時候,還可以初始化參數
            static_url_path='/python',    # 通路靜态資料的url字首,預設是static
            static_folder='static',       # 靜态檔案目錄,預設就是static
            template_folder='templates',  # 模闆檔案目錄,預設就是templates
            )
           

就是說我們在通路頁面的時候需要分兩種情況,一種是這個url指向的是一個靜态頁面,另一種就是指向的是視圖函數;下面我們假設有這種情況,我們定義的路由就是:@app.route('/index.html'),這種情況我們要怎麼區分到底是上面的哪一種?

static_url_path就幫我們解決了這個問題,但凡我們通過url通路時以static_url_path定義的路徑開頭的,我們都暫且認為它是個靜态頁面,就會到static_folder定義的路徑下尋找;

預設通路靜态檔案的字首就是static,而我們一般約定俗稱也是将靜态頁面放在static檔案夾下面,是以這裡會造成一個混淆,靜态檔案目錄是可以由我們指定的,通路靜态頁面的url字首也可以修改;

總結:我們在浏覽器進行通路的時候,url位址與檔案的實際存放位址是沒有絕對的關聯的,指定它的是static_url_path,檔案的實際存放位址在static_folder中指定。

接下來我們來看下flask參數的配置方法,比如我現在需要頁面啟動的時候進入調試模式:

我們先來看下預設沒有開啟調試模式的時候是什麼樣的:

Python3 Flask架構——第一次使用
  1. 使用配置檔案的方式配置參數:

    1)首先我們在目錄下建立一個名為config.cfg的配置檔案

    2)然後我們在這個檔案中寫上:

    Python3 Flask架構——第一次使用
    3)回到代碼中,我們将配置檔案導入:
    Python3 Flask架構——第一次使用
    Python3 Flask架構——第一次使用
  2. 使用對象配置參數:

    1)首先我們要寫一個類,将所有的參數都寫在裡面:

    class config():
        DEBUG = True
               
    2)然後我們在代碼中進行設定:
    Python3 Flask架構——第一次使用

我們可以将配置資訊看做是以字典的形式進行存取,在配置檔案中我們不僅可以配置Flask使用的配置資訊,還可以增加我們後面可能會使用到的資訊,可通過app.config['鍵名']的方式提取出來;

接下來我們看下app.run()的參數:

在預設情況下,app.run()運作的位址是127.0.0.1的本地位址,我們計算機都有一個IP位址,那如何通過IP位址對網站進行通路呢?

app.run(host='本機IP',port=端口)
           

我們可以通過上面的方法對通路位址進行修改,但是修改完畢之後,127.0.0.1就沒辦法使用了,這時我們可以将host設定成0.0.0.0,這樣不管是本機IP,還是本地位址都可以通路了;

我們在最開始的代碼中建立了一個路由,一個Web肯定是不止一個路由的,那麼我想要檢視所有的路由資訊該怎麼辦呢?

print(app.url_map)
           
Python3 Flask架構——第一次使用

我們可以看得見現在已經将所有的路由資訊全部列印來了,我們隻需要看第一行:

'/' 指的就是路由的名字

(GET,......) 指的就是允許請求的方式

hello 指的就是指向的視圖函數

上面我們說到了頁面的請求方式,從上面我們就可以看見預設情況下使用的是GET請求,那麼如果我想通過POST請求來擷取資訊,我該怎麼設定呢?

@app.route('/',methods = ['GET','POST'])
def hello():
    return 'hello'
           
Python3 Flask架構——第一次使用

我們可以在路由綁定路由的時候設定methods參數,設定頁面允許的請求方式,我們發現現在已經允許我們使用'GET'和'POST'請求了;

當同一個路由對應多個視圖函數的時候,如果均使用預設配置,那麼當我們通路的時候,能夠通路到的隻有第一個,我們可以通過不同的請求方式來實作不同視圖函數的實作;

那麼如果多個路由路徑對應一個視圖函數呢?

@app.route('/index')
@app.route('/',methods = ['GET','POST'])
def hello():
    return 'hello'
           
Python3 Flask架構——第一次使用