Web框架是構建Web應用的一種方式。儘管如今不少語言如PHP、Java都能開發Web應用,這些語言也都有相應成熟的Web框架,可是請求處理是這些Web框架的核心。知乎問答-如何學習Web框架 提到Web框架涉及的基本元素,請求處理是學習Web框架的首要問題。html
Flask 是一個用於 Python 的微型網絡開發框架。python
Flask的‘微’體如今它只提供Web服務的基本功能,其餘的功能是由Flask的擴展實現,用戶能夠根據需求應用核心擴展。它的基本功能依賴於符合 WSGI
規範(Web Server Gateway Interface)的 Werkzeug
庫和模板系統 Jinja2
。
當咱們經過URL訪問網站時,是向Web服務器發送了請求。服務器會根據URL將請求交給相應的Web程序處理。因此服務器與Web應用程序的交互須要必定的規則。而Python專用的規範是WSGI [PEP-3333定義],文章 WSGI簡介 給出了簡單說明。flask
Flask涉及到兩個重要的類——Flask和Blueprint[藍本] 類。
flask的應用程序須要Flask類實例化才能運行,網站的基本配置信息也包含在此類中。
實例化以下:segmentfault
from flask import Flask app = Flask(__name__)#__name__程序的文件名,經過此變量定位資源文件位置
配置以下:api
app.config['CONFIGURATION'] = "CONFIGURATION"
Blueprint類與Flask相似,它可以更好的組織Web應用程序,並能延遲Flask類實例的建立。服務器
路由
的存在是爲了將Web服務的請求轉交給Flask程序實例的函數處理,簡單的說處理URL和函數之間的關係稱爲路由。函數稱爲視圖函數
。Flask類
包含了route裝飾器,經過初始化Flask類註冊視圖函數。cookie
@app.route('/') def index(): return "<h1>Hellow World</h1>"
當訪問網站根域名時,會執行index函數,返回值的結果會在網頁中顯示。。網絡
在不少時候用戶不一樣,使用的URL不一樣,帶參數的路由可以很好的處理URL中變化的部分。如在網頁中顯示我的名字app
@app.route('/user/<name>') def user(name): return '<h1>Hello, {!r}</h1>'.format(name)
<name>
部分是可變部分,name將做爲參數傳遞給視圖函數。此部分能夠指定name 的類型,如@app.route('/user/<int:age>')
可指定參數類型
可指定的類型有int,float,path(路徑標識)框架
@app.route('/', methods=['GET', 'POST']) def index(): pass
當網頁須要處理表單等請求時,須要添加methods,使得視圖函數可以處理http請求。methods中的參數包括了Http協議中定義的5種動做。
from flask import make_request @app.route('/'): response = make_request("<h1>Cookie</h1>") response.set_cookie('answer','42') return response
響應處理中很重要的一部分是處理Http協議的狀態碼。Flask默認狀態碼是200。而返回特殊狀態碼可在返回值中添加,代碼以下:
@app.route('/') def index(): return "<h1>Bad Request</h1>", 400 #返回特殊狀態碼
?
後的鍵值對由flask提供request對象處理。假設URL爲127.0.0.1:5000?page=1
from flask import request @app.route('/', methods=['GET']) def index(): page = request.args.get('page', type=int)
在瀏覽網頁時,可能會遇到一些錯誤,flask提供abort函數拋出錯誤,而拋出的異常會直接返回給Web服務器。咱們也能夠自定義處理這些異常。代碼以下:
from flask import abort @app.route('/') def index(): abort(404) #拋出404異常 @app.errorhandler(404) def page_not_found(error): # 自定義處理異常 return 'This page does not exist', 404
請求鉤子
是指在請求以前或以後所作的處理函數
函數名 | 功能 |
---|---|
before_first_request | 在處理第一個請求以前執行 |
before_request | 每次請求以前執行 |
after_request | 無異常,每次請求以後執行 |
teardown_request | 即便異常,也在請求以後執行 |
請求鉤子函數與視圖函數之間經過g變量共享數據。
Q1:如何調試Web應用程序?
Q2:如何評價Web應用程序的性能?
Q3:Web應用程序如何作單元測試?
《Flask Web 開發》SegmentFault系列文章 - 做者只錄入了前七章內容,未涉及實例開發部分
《Flask Web 開發》中文版 - 建議入手第二版
《Flask Web 開發》做者Blog - 書中有任何疑問能夠在文章中搜索