1.初始化
所有的flask程序都必須創建壹個程序實例
web服務器使用wsgi接口協議,把接收客戶端的請求都轉發給這個程序實例來進行處理。這個程序實例就是flask對象
from flask import Flask
app = Flask(__name__)
#__name__決定程序的根目錄,以便以後能找到相對於程序根目錄的資源文件位置
2.路由和視圖函數
程序實例需要知道接收請求後,需要知道url請求應該運行哪些代碼。所以保存了壹個url和python函數的映射關系;這個映射關系就叫做路由
flask程序中路由的寫法:
2.1#使用app.route裝飾器,把修飾的函數註冊為路由。例如
@app.route('/')def index(): return "<h1>Hello World</h1>"
#函數的名字不是必須寫index的,只是和裝飾器關聯的時候寫的函數名而已
#把index函數註冊為程序根路徑的處理程序。函數的返回值稱為響應,是客戶端接收的內容。
像index這樣的函數稱為試圖函數,試圖函數返回的響應可以是包含html的簡單字符串,也可以是復雜的東西
2.2#可變url部分映射,使用特定的裝飾器語法就可以
@app.route('/user/<name>')def user(name): return "<h1>hello %s</h1>"%(name)
裝飾器中的<name>指定可變內容為name,name對user(name)函數中的傳遞參數,這2個部分內容必須壹致
調用試圖函數時候,flask會自動的將動態部分作為參數傳入參數,這個函數中,參數用於生成個人的歡迎信息
#備註:路由中的動態部分默認使用字符串類型,可以使用int,float,path來定義;例如<int:id>;path類型也是字符串,但不把斜線視作分隔符,而將其當做動態片段的壹部分
3.啟動服務器
調用程序實例app的run方法啟動flask集成開發的web服務器
if __name__ == "__main__":
app.run(debug=True)
debug=True代表的是調試模式,這個flask自帶的run方法開啟的服務器不適合在生產中使用,此處只用來測試
4.壹個完整的Flask程序
啥也不說,先上例子hello.py
from flask import Flask
app = Flask(__name__)
@app.route('/')def index(): return '<h1>HelloWorld</h1>'@app.route('/user/<name>')def user(name): return "<h1>hello %s</h1>"%nameif __name__ == "__main__":
app.run(debug=True)
默認會開啟服務器本機5000端口;127.0.0.1:5000
執行腳本python hello.py
瀏覽器測試')
還有壹種特殊的響應類型,flask提供了壹種錯誤響應。這個由abort函數來提供。abort拋出404異常,拋出異常後把控制權移交給web服務器
例如:
from flask import abort
@app.route('/user/<id>')def get_user(id):
user = load_user(id) if not user:
abort(404) return '<h1>Hello,%s</h1>'%(user.name)
10.flask的擴展flask-script
這個例子主要是講如何把flask擴展添加到程序中,並使用
例如下面妳的例子是添加flask-script擴展,使用命令行參數增強程序的功能
使用命令行方式啟動web服務器,而不是修改文件,給run方法傳遞參數
安裝擴展
pip install flask-script
使用flask-script擴展,並把hello.py文件改為命令行參數啟動的形式#添加的擴展默認會安裝到flask.ext命名空間中
from flask import Flaskfrom flask.ext.script import Manager
app = Flask(__name__)
manager = Manager(app)
@app.route('/')def index(): return '<h1>HelloWorld</h1>'@app.route('/user/<name>')def user(name): return "<h1>hello %s</h1>"%nameif __name__ == "__main__":
manager.run()
flask-script擴展中添加了壹個Manager的類,以上例子中,這個擴展初始化的方法是,把程序實例作為參數傳遞給構造函數來初始化主類的實例。後續其他flask擴展也基本是這個套路
這樣修改之後,程序就可以使用壹組基本的命令行選項來啟動和調試了
python hello.py shell#在flask應用上下文環境中運行python shell,方便測試和調試web環境
python hello.py runserver#運行flask開發服務器,app.run()
python hello.py -h#顯示幫助信息
python hello.py runserver --help
usage: hello.py runserver [-h] [-t HOST] [-p PORT] [--threaded]
[--processes PROCESSES] [--passthrough-errors] [-d]
[-r]
python hello.py runserver -h 0.0.0.0 -p 80#這樣就開啟了本機的80端口,別的機器可以遠程訪問了