【Flask】Flask學習筆記(一) 應用基本結構
阿新 • • 發佈:2019-03-29
route windows 數字 browser 基本結構 主程序 web瀏覽器 ive app
初始化
使用前必須創建一個應用實例
from flask import Flask app = Flask(__name__)
路由和視圖函數
請求流程
客戶端(web瀏覽器)--> web服務器 --> Flask應用實例
路由概念
應用實例需要知道對每個 URL 的請求要運行哪些代碼, 所以保存了一個 URL 到 Python 函數的映射關系。處理 URL 和函數之間關系的程序稱為路由。
定義路由
使用app.route 裝飾器
@app.route(‘/‘) def index(): return ‘<h1>Hello World!</h1>‘
視圖函數
上面類似於index這種處理入站請求的函數稱為視圖函數。
響應
視圖函數返回值稱為響應。響應可以為簡單字符串,也可以是復雜表單。
實例:一個完整的應用
hello.py
from flask import Flask app = Flask(__name__) @app.route(‘/‘) def index(): return ‘<h1>Hello World!</h1>
windows運行
E:\study\flask>set FLASK_APP=hello.py E:\study\flask>flask run * Serving Flask app "hello.py" * Environment: production WARNING: Do not use the development server in a production environment. Use a production WSGI server instead. * Debug mode: off * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) 127.0.0.1 - - [27/Mar/2019 15:53:11] "GET / HTTP/1.1" 200 -
瀏覽器顯示
通過編程方式啟動
主程序尾部增加如下代碼
if __name__==‘__main__‘: app.run()
動態路由
URL中包含可變部分
dynamic_route.py
from flask import Flask app = Flask(__name__) @app.route(‘/‘) def index(): return ‘<h1>Hello World!</h1>‘ @app.route(‘/user/<name>‘) def user(name): return ‘<h1>Hello, {}!</h1>‘.format(name) if __name__==‘__main__‘: app.run()
瀏覽器顯示
調試模式
調試模式中會自動加載兩個工具: 重載器 和調試器 。
啟用調試模式
執行flask run之前設定FLASK_DEBUG=1
E:\study\flask>set FLASK_APP=hello.py E:\study\flask>set FLASK_DEBUG=1 E:\study\flask>flask run * Serving Flask app "hello.py" (lazy loading) * Environment: production WARNING: Do not use the development server in a production environment. Use a production WSGI server instead. * Debug mode: on * Restarting with stat * Debugger is active! * Debugger PIN: 627-210-384 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
編程代碼中設置
if __name__==‘__main__‘: app.run(debug=True)
應用&請求上下文
上下文作用:臨時把某些對象變為全局可訪問。
from flask import request @app.route(‘/‘) def index(): user_agent = request.headers.get(‘User-Agent‘) return ‘<p>Your browser is {}</p>‘.format(user_agent)
index視圖函數中把 request 當作全局變量使用
Flask上下文全局變量
上下文處理流程
激活應用&請求上下文 --> ask 分派請求 --> 請求處理完成再將其刪除
激活上下文
>>> from hello import app >>> from flask import current_app >>> app_ctx=app.app_context() >>> app_ctx.push() >>> current_app.name ‘hello‘ >>> app_ctx.pop()
PS:
- app.app_context() 獲取上下文
- push():激活上下文
- pop():關閉上下文
請求鉤子
即通用函數的功能,處理請求之前或之後的執行代碼。註冊的函數可在請求被分派到視圖函數之前或之後調用。請求鉤子通過裝飾器實現。
請求鉤子函數和視圖函數之間共享數據一般使用上下文全局變量 g
響應
對視圖函數返回的響應添加不同的狀態碼。
方法:把數字代碼作為第二個返回值, 添加到響應文本之後。
@app.route(‘/‘) def index(): return ‘<h1>Bad Request</h1>‘, 400
make_response():返回等效的響應對象
重定向
使用redirect() 函數
from flask import redirect @app.route(‘/‘) def index(): return redirect(‘http://www.example.com‘)
異常處理
使用abort() 函數
from flask import abort @app.route(‘/user/<id>‘) def get_user(id): user = load_user(id) if not user: abort(404) return ‘<h1>Hello, {}</h1>‘.format(user.name)
PS:abort() 不會把控制權交還給調用它的函數,而是拋出異常。
【Flask】Flask學習筆記(一) 應用基本結構