1. 程式人生 > >Flask學習筆記:建立一個簡單的Flask應用

Flask學習筆記:建立一個簡單的Flask應用

1. 做好準備工作
  • 進入專案主目錄
  • 啟用虛擬環境
2. 建立app包:

在flask中,含有名為 __init__.py 檔案的子目錄被視為包,可以被匯入。

在命令列輸入以下命令,建立一個名為app的目錄:

(venv) $ mkdir app

在app目錄中建立一個名為__init__.py的檔案,包含以下程式碼:

app/__init__.py

from flask import Flask

app = Flask(__name__)

from app import routes

上面的指令碼從flask包中匯入了Flask類,並建立了一個應用例項。傳遞給Flask類的 __name__ 變數是一個Python預定義變數,這個變數被設定為使用它的模組的名稱。當Flask需要載入相關資源如模板檔案時,會將此處傳遞的模組的位置作為起點。在實際使用中,一般都會通過傳遞__name__變數配置Flask。然後,應用匯入了現在還不存在的routes模組。

此處出現了2個app。app所在的目錄和__init__.py 指令碼定義定義了app包,並由 from app import routes語句引用。而app變數則是__init__.py 指令碼中Flask類的例項,使之成為app包的一員。

另一個要注意的是routes模組是在指令碼底部而不是頂部匯入的。底部匯入是迴圈匯入的替代方法,是Flask應用的常見問題。因為接下來routes模組需要匯入這個指令碼中定義的app變數,所以在底部匯入可以避免兩個檔案互相引用導致的錯誤。

那麼routes模組是幹什麼的呢?在Flask中,應用路由的處理器是以Python函式的形式寫的,叫做view functions(檢視函式)。檢視函式對映到一個或多個的路由URL,這樣Flask才知道當客戶端請求給定url時要執行的邏輯。

把這個檢視函式寫到名為app目錄中名為routes.py的新模組中:

from app import app

@app.route('/')
@app.route('/index')
def index():
    return "Hello, World!"

這個檢視函式很簡單,返回一個歡迎的字串。函式上面的兩個@app.route叫做裝飾器,這是python語言的特性。裝飾器裝飾它後面的函式。裝飾器的常見模式是將函式註冊為某些事件的回撥。在這個例子中,@app.route 裝飾器在以引數形式給定的URL和函式之間建立關聯。 這個例子的兩個裝飾器將URL / 和 /index 關聯到這個函式。也就是說當web瀏覽器請求這兩個URL時,Flask會呼叫這個函式並將它的返回值作為響應傳回瀏覽器。

現在,建立一個名為manage.py的指令碼,然後匯入應用例項:

from app import app

這裡又出現了2個app,Flask應用的例項叫做app,是app包的一員。 from app import app語句匯入了app包中的app變數。感覺困惑的話可以把包名或者變數名改成別的。

現在,專案結構應該是這樣的:

webapp/
  venv/
  app/
    __init__.py
    routes.py
  manage.py

像這樣設定環境變數:

(venv) $ export FLASK_APP=manage.py

windows就比較坑爹了,官方文件中說這麼寫:

(venv) $ set FLASK_APP=manage.py

但是實際也許不會成功,會提示以下錯誤:

Usage: flask run [OPTIONS]

Error: Could not locate Flask application. You did not provide the FLASK_APP environment variable.

For more information see http://flask.pocoo.org/docs/latest/quickstart/

我用的是PowerShell,網上找了一些方法,都不成功,後來按照Stack Overflow上這個方法來就成功了:

(venv) $env:FLASK_APP = "manage.py"

然後,在命令列輸入flask run命令就可以執行flask了:

(venv) $ flask run
 * Serving Flask app "projectname"
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

服務在IP地址127.0.0.1上執行,也叫localhost,這是本地的。網路伺服器監聽指定埠上的連結,在生產web伺服器上部署的應用通常在443埠上監聽,如果沒有加密,有時是80埠,但對這些埠的訪問需要管理員許可權。由於目前程式在生產環境中執行,所以用的是5000埠,現在開啟web瀏覽器,在位址列輸入以下URL:

http://localhost:5000/

或者這個URL:

http://localhost:5000/index