flask-帶你快速入門

一個小應用

創建一個Python文件:hello.py

from flask import Flask
app = Flask(__name__)   #app是程序實例,一個項目只能有一個程序實例@app.route('/')   #路由裝飾器def hello_world():  #視圖函數
    return 'Hello World!'  #返回一個字符串if __name__ == '__main__':
     app.run()1234567812345678

python解釋器來運行

$ python hello.py
* Running on http://127.0.0.1:5000/1212

上面代碼

  1. 首先,我們導入了 Flask 類。這個類的實例將會是我們的 WSGI 應用程序

  2. 接下來,我們創建一個該類的實例,第一個參數是應用模塊或者包的名稱。 如果你使用單 
    塊(如本例),你應該使用 name ,因爲模塊的名稱將會因其作爲單獨應用啓動還是作 
    塊導入而有不同( 也即是 ‘main’ 或實際的導入名)。這是必須的,這樣 Flask 才知道 
    去找模板、靜態文件等等。詳情見 Flask的文檔。

  3. 然後,我們使用 route() 裝飾器告訴 Flask 什麼樣的URL 能觸發我們的函數。

  4. 這個函數的名字也在生成 URL 時被特定的函數採用,這個函數返回我們想要顯示在用戶瀏 
    的信息。

  5. 最後我們用 run() 函數來讓應用運行在本地服務器上。 其中 if name ==’main‘: 確保服 
    只會在該腳本被 Python 解釋器直接執行的時候纔會運行,而不是作爲模塊導入的時候。

關閉服務器,按 Ctrl+C。

# 修改調用 run() 的方法使你的服務器公開可用
app.run(host='0.0.0.0')123123

調試代碼

雖然 run() 方法適用於啓動本地的開發服務器,但是你每次修改代碼後都要手動重啓它。這樣並不夠 
優雅,而且 Flask 可以做到更好。如果你啓用了調試支持,服務器會在代碼修改後自動重新載入,並 
在發生錯誤時提供一個相當有用的調試器。就算出錯了,也不用重新啓動。 
有兩種途徑來啓用調試模式。一種是直接在應用對象上設置:

app.debug = True
app.run()1212

另一種是作爲 run 方法的一個參數傳入:

app.run(debug=True)11

兩種方法的效果完全相同。

路由裝飾器

這裏是一些基本的例子:

@app.route('/') def index():   
     return 'Index'@app.route('/hello/') def hello():    
    return '<h1>Hello world!</h1>'12345671234567

客戶端(例如 Web 瀏覽器)把請求發送給 Web 服務器, Web 服務器再把請求發送給 Flask程序實例。程序實例需要知道對每個 URL 請求運行哪些代碼,所以保存了一個 URL 到Python 函數的映射關 系。處理 URL 和函數之間關係的程序稱爲路由。

在 Flask程序中,定義路由使用 app.route修飾器,route()裝飾器把一個函數綁定到對應的URL上。

函數的返回值叫響應,是客戶端接收到的內容。如果客戶端是 Web 瀏覽器, 響應就是顯示給 用戶查看的文檔。

像index()這樣的,稱爲是視圖函數。視圖函數返回的響應可以是包含html的簡單字符串,也可以是複雜的表單。

變量規則

@app.route('/user/<name>')def showUserName(name):    
    return "User %s" %[email protected]('/post/<int:post_id>') def showPostId(post_id):    
    return "Post %d" %post_id12345671234567

很多URL地址都包含可變部分。flask中,只需在route修飾器中使用特殊的句法

尖括號的內容就是動態部分,任何能匹配靜態部分的URL都會映射到這個路由上。調用視圖函數的時候,flask會將動態部分作爲參數傳入函數中。

路由中的動態部分默認是使用字符串,不過也可以使用類型定義。。例如,路由 /user/只會匹配動 態片段 id 爲整數的 URL。 Flask 支持在路由中使用 int、 float 和 path 類型。path 類型也是字符串,但不把斜線視作分隔符,而將其當作動態片段的一部分。

變量規則就是處理動態信息的。 
【注意】

  • app.route()函數中尖括號裏面的是變量名,必須和視圖函數的形參名一致

  • 如果是int或者float類型,不能直接return。必須轉換爲字符串格式纔可以,否則會報錯: TypeError: ‘int’ object is not callable

重定向和錯誤

  • 用redirect()函數把用戶重定向到其他地方

  • 用abort()函數放棄請求並返回錯誤代碼

@app.route('/redir/') def redir():    
    return redirect('/login/')@app.route('/login/') def login():   
     abort(401)1234567812345678

用戶會從/redir/重定向到一個不能訪問的頁面 (401 意味着禁止訪問)。

造URL

用url_for()來給指定的函數生成url。它接受函數名作爲第一個參數,也接受對應URL規則的變量部分的命名參數。

@app.route('/world/') def world():    # return redirect('/hello/')    # return redirect(url_for('hello'))    # return redirect(url_for('showUserName',name = 'liusheng'))    return redirect(url_for('showPostId', post_id = 100)) # 注意這裏的100可以是字符串也可以是整型12345671234567

使用url_for()生成 URL 的好處: 
- 允許一次性修改 URL,而不用到處邊找邊改。 
- URL 構建會轉義特殊字符和 Unicode 數據,免去你很多麻煩。

使用Flask-Script支持命令行選項

Flask-Script是一個Flask擴展,爲Flask程序添加了一個命令行解析器。Flask-Script 自帶了 一組常用選項,而且還支持自定義命令。

Flask-Script 擴展使用 pip 安裝:

(venv) $ pip install flask-script11

把命令行解析功能添加到 hello.py 程序中時需要修改的地方:

from flask_script import Manager 
manager = Manager(app)if __name__ == '__main__':    
    manager.run()1234512345

這樣修改之後,程序可以使用一組基本命令行選項。 
我們運行 python hello.py runserver 來啓動 Web 服 務器。

還有很多選項來代替app的debug和host屬性:

--host HOST 設置host爲 HOST --port PORT 設置port爲 PORT-d 設置以debug模式運行而非run模式 
-r 設置自動重新載入(app.debug爲True)12341234

命令:

python hello.py runserver -d -r --host 0.0.0.011


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章